Как реализовать функцию, аналогичную оператору поиска mysql в pandas:
select * from table where column_name = some_value;
Есть несколько способов получить данные в pandas:
- логический индекс
- индекс местонахождения
- Индекс тега
- Использование API
Предположим, что данные следующие:
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})
логический индекс
Этот метод на самом деле заключается в том, чтобы узнать истинное значение, которое соответствует условиям в каждой строке, например, узнать, что все значения в столбце A равны foo
df[df['A'] == 'foo'] # 判断等式是否成立
индекс местонахождения
Используйте метод iloc для поиска данных на основе местоположения индекса. В этом примере необходимо сначала выяснить, где расположены строки, соответствующие условиям.
mask = df['A'] == 'foo'
pos = np.flatnonzero(mask) # 返回的是array([0, 2, 4, 6, 7])
df.iloc[pos]
#常见的iloc用法
df.iloc[:3,1:3]
Индекс тега
Если строки и столбцы DataFrame помечены, то использование метода loc очень подходит.
df.set_index('A', append=True, drop=False).xs('foo', level=1) # xs方法适用于多重索引DataFrame的数据筛选
# 更直观点的做法
df.index=df['A'] # 将A列作为DataFrame的行索引
df.loc['foo', :]
# 使用布尔
df.loc[df['A']=='foo']
Использование API
pd.DataFrame.queryЭтот метод более эффективен, чем обычный метод, когда объем данных велик.
df.query('A=="foo"')
# 多条件
df.query('A=="foo" | A=="bar"')
Извлечение данных - это не только случай, упомянутый выше, первый ответ дает следующие распространенные случаи: 1. Отфильтруйте строку, значение столбца которой равно скаляру, используйте ==
df.loc[df['column_name'] == some_value]
2. Отфильтруйте строки, значения столбцов которых принадлежат определенному диапазону, используйте isin
df.loc[df['column_name'].isin(some_values)] # some_values是可迭代对象
3. Используйте & при использовании нескольких условий, & имеет более высокий приоритет, чем >= или
df.loc[(df['column_name'] >= A) & (df['column_name'] <= B)]
4. Отфильтруйте строки, значение столбца которых не равно некоторым/некоторым значениям
df.loc[df['column_name'] != 'some_value']
df.loc[~df['column_name'].isin('some_values')] #~取反
Если вы считаете, что мои статьи вам подходят, вы можете подписаться на мою общедоступную учетную запись WeChat, чтобы увидеть больше практических статей:Боевая дорога на гусеничном ходу PythonВы также можете отсканировать QR-код ниже, чтобы добавить мою общедоступную учетную запись WeChat.