Как отфильтровать датафрейм Pandas за 3 минуты
В Pandas есть много способов отфильтровать DataFrame. Я познакомлю вас с наиболее важными вариантами с помощью Симпсонов.
Логическое индексирование
Логическое индексирование требует поиска истинных значений для каждой строки. Если вы ищете df['column'] == 'XY'
, создается True / False Series.
Представьте себе, что вы только что были на съемочной площадке с Симпсонами. Они звезды, и каждому из них разрешено заказать несколько вещей на следующий сезон, которые оплачиваются производителями. Ваша задача - принять заказы главных героев и отправить соответствующие данные:
df = pd.DataFrame({'Items': 'Car Saxophone Curler Car Slingshot Duff'.split(),
'Customer': 'Homer Lisa Marge Lisa Bart Homer'.split(),
'Amount': np.arange(6), 'Costs': np.arange(6) * 2})
print(df)
Items Customer Amount Costs
0 Car Homer 0 0
1 Saxophone Lisa 1 2
2 Curler Marge 2 4
3 Car Lisa 3 6
4 Slingshot Bart 4 8
5 Duff Homer 5 10
Пример 1. Выбор строк с определенным значением.
Давайте найдем все записи для Барта, чтобы мы могли переслать их его менеджеру:
df.loc[df['Customer'] == 'Bart']
Items Customer Amount Costs
4 Slingshot Bart 4 8
Пример 2 - выбор строк из списка
На съемочной площадке дошли слухи, что мы являемся экспертами в области данных, а партнеры по рекламе хотят знать, что именно показывают дети в рекламных целях:
kids = ['Lisa','Bart']
df.loc[df['Customer'].isin(kids)]
Items Customer Amount Costs
1 Saxophone Lisa 1 2
3 Car Lisa 3 6
4 Slingshot Bart 4 8
Мы увидим саксофон, автомобили и рогатки в телевизионной рекламе...
Пример 3 - Объединение нескольких условий
Также Симпсоны должны экономить деньги. Новые правила:
1) нет автомобилей
2) можно заказывать не более 3 предметов на человека
df.loc[(df['Items'] != 'Car') & (df['Amount'] <= 3)]
Items Customer Amount Costs
1 Saxophone Lisa 1 2
2 Curler Marge 2 4
Я надеюсь, что Гомер и Барт останутся с нами и не покинут шоу в ярости…
Пример 4 - Выбрать все строки, которые не отображаются в списке
К сожалению, звезды сериала не в восторге от этих сокращений, поэтому первые спонсоры выступают, чтобы помочь:
happy_stars = ['Lisa','Marge']
df.loc[~df['Customer'].isin(happy_stars)]
Items Customer Amount Costs
1 Saxophone Lisa 1 2
3 Car Lisa 3 6
4 Slingshot Bart 4 8
Позиционная индексация
Иногда вы не хотите фильтровать в соответствии с определенным условием, но выбираете определенные строки DataFrame в зависимости от их положения. В этом случае мы используем нарезку, чтобы получить нужные строки.
Пример 1 - Выберите первые строки кадра данных
Новый стажер в вашем отделе не должен работать напрямую со всем набором данных, ему нужны только первые три записи:
df.iloc[0:3]
Items Customer Amount Costs
0 Car Homer 0 0
1 Saxophone Lisa 1 2
2 Curler Marge 2 4
Пример 2 - Выберите последние строки кадра данных
У вас много работы, и вы получите другого стажера. Чтобы оба слушателя работали над своими задачами независимо, теперь вы сохраняете последние три строки записи:
df.iloc[-3:]
Items Customer Amount Costs
3 Car Lisa 3 6
4 Slingshot Bart 4 8
5 Duff Homer 5 10
Вывод
Мы можем выбрать любую конкретную строку из нашего набора данных в соответствии с ее значениями или положением. Pandas предлагает простые способы учета нескольких значений при формулировании условия. Списки и условия могут быть легко связаны друг с другом.