Панды, loc против non loc для булевой индексации - PullRequest
0 голосов
/ 14 ноября 2018

Все исследования, которые я проводил, указывают на использование loc в качестве способа фильтрации кадра данных по значению (ям) col (s), сегодня я читал это , и я обнаружил на примерах, которые я проверено, что loc на самом деле не требуется при фильтрации значений по столбцам:

EX:

df = pd.DataFrame(np.arange(0, 20, 0.5).reshape(8, 5), columns=['a', 'b', 'c', 'd', 'e'])    

df.loc[df['a'] >= 15]

      a     b     c     d     e
6  15.0  15.5  16.0  16.5  17.0
7  17.5  18.0  18.5  19.0  19.5

df[df['a'] >= 15]

      a     b     c     d     e
6  15.0  15.5  16.0  16.5  17.0
7  17.5  18.0  18.5  19.0  19.5

Примечание: я знаю, что выполнение loc или iloc возвращает строки по их индексу и по позиции. Я не сравниваю на основе этой функциональности.

Но при фильтрации, используя "where", в чем разница между использованием или не использованием loc? Если есть. И почему все примеры, с которыми я сталкиваюсь относительно этой темы, используют loc?

1 Ответ

0 голосов
/ 14 ноября 2018

Согласно документам, loc принимает логический массив для выбора строк, а в вашем случае

>>> df['a'] >= 15
>>> 
0    False
1    False
2    False
3    False
4    False
5    False
6     True
7     True
Name: a, dtype: bool

рассматривается как логический массив.

Тот факт, что вы можете опустить loc здесь и выдать df[df['a'] >= 15], - особый случай, по словам Уэса МакКинни, автора pandas.

Цитирую прямо из своей книги Python для анализа данных , с. 144, df[val] используется для ...

Выберите один столбец или последовательность столбцов в кадре данных; особый случай Удобства: логический массив (строки фильтра) , слайс (строки слайса) или логический DataFrame (установить значения по некоторому критерию)

...