Чтобы выбрать строки, значение столбца которых равно скаляру, some_value
, используйте ==
:
df.loc[df['column_name'] == some_value]
Чтобы выбрать строки, значение столбца которых в итерабельном, some_values
, используйте isin
:
df.loc[df['column_name'].isin(some_values)]
Объединить несколько условий с &
:
df.loc[(df['column_name'] == some_value) & df['other_column'].isin(some_values)]
Выбрать строки, значение столбца не равно some_value
, используйте !=
:
df.loc[df['column_name'] != some_value]
isin
возвращает булевскую серию, поэтому для выбора строк, значение которых не в some_values
, отмените булевскую серию используя ~
:
df.loc[~df['column_name'].isin(some_values)]
Например,
import pandas as pd
import numpy as np
df = pd.DataFrame({'A': 'foo bar foo bar foo bar foo foo'.split(),
'B': 'one one two three two two one three'.split(),
'C': np.arange(8), 'D': np.arange(8) * 2})
print(df)
# A B C D
# 0 foo one 0 0
# 1 bar one 1 2
# 2 foo two 2 4
# 3 bar three 3 6
# 4 foo two 4 8
# 5 bar two 5 10
# 6 foo one 6 12
# 7 foo three 7 14
print(df.loc[df['A'] == 'foo'])
дает
A B C D
0 foo one 0 0
2 foo two 2 4
4 foo two 4 8
6 foo one 6 12
7 foo three 7 14
Если у вас несколько значений вы хотите включить, поместить их в список (или, в более общем плане, любой итерабельный) и использовать isin
:
print(df.loc[df['B'].isin(['one','three'])])
дает
A B C D
0 foo one 0 0
1 bar one 1 2
3 bar three 3 6
6 foo one 6 12
7 foo three 7 14
Примечание, однако, если вы хотите сделать это много раз, более эффективно сначала сделать индекс, а затем использовать df.loc
:
df = df.set_index(['B'])
print(df.loc['one'])
дает
A C D
B
one foo 0 0
one bar 1 2
one foo 6 12
или, чтобы включить несколько значений из использования индекса df.index.isin
:
df.loc[df.index.isin(['one','two'])]
дает
A C D
B
one foo 0 0
one bar 1 2
two foo 2 4
two foo 4 8
two bar 5 10
one foo 6 12
Короткий ответ - оба нет, и Он Зависит.
Это почти никогда не хорошая идея сохранить пароли в простом тексте, особенно в веб-доступном месте, если для [1 111] никакой другая причина, чем простая неверная конфигурация сервера или эхо в неправильном месте могла выставить его миру.
, Если НЕОБХОДИМО сохранить пароль, (который возможен) Вы могли попытаться сохранить его вне webroot, например, /var/www/public_html/
Помещенный Ваши коды здесь
/var/www/includes/
Помещенный, Ваши пароли здесь
Еще лучше, чем это будут состоять в том, чтобы иметь систему, что Вам нужен пароль для (например, обертка базы данных) возвращают объект, который уже инстанцируют. так вместо того, чтобы просить $databasepassword
Вы просите объект PDO и храните свои классы базы данных вне webroot.
Это Зависит, прибывает из того, какие векторы атаки заставили бы кого-то иметь доступ к тому тексту пароля, и будет это требовать, чтобы они уже были в Вашей файловой системе, если так, Вы, вероятно, завинчены так или иначе.
кроме того, если это - пароль к Вашему supa-secrit содержанию подписчика, meh, все, которое Вы проиграли, некоторая абонентская плата, если его Ваша база данных, у Вас может быть проблема, если это - Ваши детали онлайна - банкинга, гм хорошие для Вас.
то, Насколько ценный действительно ли вещью является пароль, защищает?
В зависимости от того, как Вы определяете безопасный, любой подход имеет свои положительные и отрицательные аспекты.
, Если Вы действительно хотите сохранить пароль в своем источнике, это могла бы быть хорошая идея сделать что-то вроде этого:
Файл: файл config.php
if( ! defined('IN_CODE') ) die( 'Hacking attempt' );
define( 'PASSWORD_HASH', '098f6bcd4621d373cade4e832627b4f6' );
: простой текст index.php
define( 'IN_CODE', '1' );
include( 'passwd.php' );
if( md5($password) == PASSWORD_HASH )
...
никогда не является хорошей идеей, всегда храните хеш пароля, который Вы хотите сохранить.
, Кроме того, попытайтесь отделиться, определяет как это от Вашего основного исходного файла.
Если сам сайт не поставлен под угрозу, и теперь так все вещи, к которым те пароли предоставляют доступ (Ваш DB, возможно?).
Обычно они не видят его. Но если что-то плохо происходит на сервере существует большая возможность, что сервер возвратит Ваш код php в простом тексте w/o выполнение его, и поэтому пользователь будет видеть весь источник того файла и также Вашего пароля.
Я сохранил бы пароль где-нибудь, где это не находится на корне документа (Не может быть открыто в браузере), и затем откройте тот файл с php и считайте содержание (пароль). Или если бы у Вас есть несколько паролей/пользователей, я сохранил бы их в базе данных для быстрого доступа.
Если Вы хотите использовать расположение каталога метода файла, должен выглядеть примерно так (depneds на сервере)
/public_html/index.php
/password.txt
$myFile = $_SERVER['DOCUMENT_ROOT'] + "/../password.txt";
if file_exists($myFile) {
$fh = fopen($myFile, 'r');
$password = fgets($fh);
fclose($fh);
} else die("No password file");
if ($user_input == $password) {
...... Authentication succeeded ..........
......your relatively protected code .....
} else die("Wrong password");
Если Вы хотите еще больше безопасности вместо того, чтобы хранить пароль как текст в том текстовом файле. Рана это - хеш и затем когда Вы хотите сравнить его с вводом данных пользователем, генерирует хеш от ввода данных пользователем и сравнивает его с хешем пароля, который Вы загрузили из текстового файла
sha1($user_input) == $password_from_txt
Пока Ваша установка PHP работает, как она должна, это не быть менее безопасной, чем какой-либо другой метод. Я предпочел бы, чтобы названная константа (определила) по переменной. Дополнительно Вы могли бы рассмотреть хранение хеша пароля вместо простого пароля. Это предотвращает кражу Ваших паролей, даже если сайт поставлен под угрозу.
Что касается того, чтобы быть плохой практикой, это зависит. Если необходимо сохранить всего один пароль, этот подход в порядке. Хранение их вне корня документа может дать ложное чувство дополнительной безопасности; корень документа является не более абсолютным, чем какая-либо другая установка сервера.
Иногда это просто должен быть f.e. для почтового приложения, где можно только войти в систему с простым паролем а не с хешем. И если Ваше приложение не имеет проблем безопасности, оно не должно влиять на Вас.
Это зависит, как Вы определяете 'безопасный'.
Вы правы в этом, обычный пользователь не будет видеть его.
Однако это - определенно плохая практика; если Ваш сайт поставлен под угрозу, к чему еще эти пароли предоставят доступ? Я сказал бы как минимум, что необходимо хранить хеш пароля, не простой текст.
Я полагаю, что в большинстве случаев простой текстовый пароль будет паролем базы данных, поскольку MySQL, например, не принимает хэш для аутентификации.
Как упоминалось ранее, лучшим решением является сохранение PHP config с паролем вне корневого веб-узла.
Если вас беспокоит, что кто-то может увидеть ваш пароль при просмотре файла, вы можете просто сделать его нечитаемым для человека с помощью функции base64.
См. этот пост для получения подробной информации и даже небольшой утилиты для Windows, Linux и Mac, которая упрощает задачу.