Используйте pandas, чтобы отфильтровать строку, соответствующую указанному значению столбца.

Python

Как реализовать функцию, аналогичную оператору поиска 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.

公众号