Pandas: пошук рядка в усіх стовпцях dataframe


Ви можете використовувати наступний синтаксис для пошуку певного рядка в кожному стовпці pandas DataFrame і фільтрувати рядки, що містять рядок принаймні в одному стовпці:

 #define filter
mask = np. column_stack ([df[col]. str . contains (r " my_string ", na= False ) for col in df])

#filter for rows where any column contains 'my_string'
df. loc [mask. any (axis= 1 )]

У наступному прикладі показано, як використовувати цей синтаксис на практиці.

Приклад: шукайте рядок у всіх стовпцях Pandas DataFrame

Припустімо, що у нас є такий фрейм даних pandas, який містить інформацію про першу роль і другу роль різних баскетболістів у команді:

 import pandas as pd

#createDataFrame
df = pd. DataFrame ({' player ': ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'],
                   ' first_role ': ['P Guard', 'P Guard', 'S Guard', 'S Forward',
                                  'P Forward', 'Center', 'Center', 'Center'],
                   ' second_role ': ['S Guard', 'S Guard', 'Forward', 'S Guard',
                                   'S Guard', 'S Forward', 'P Forward', 'P Forward']})

#view DataFrame
print (df)

  player first_role second_role
0 AP Guard S Guard
1 BP Guard S Guard
2 CS Guard Forward
3DS Forward S Guard
4 EP Forward S Guard
5 F Center S Forward
6 G Center P Forward
7 H Center P Forward

Наступний код показує, як відфільтрувати pandas DataFrame для рядків, де в будь-якому стовпці з’являється рядок «Guard»:

 import numpy as np

#define filter
mask = np. column_stack ([df[col]. str . contains (r " Guard ", na= False ) for col in df])

#filter for rows where any column contains 'Guard'
df. loc [mask. any (axis= 1 )]

        player first_role second_role
0 A P Guard S Guard
1 B P Guard S Guard
2 C S Guard Forward
3 D S Forward S Guard
4 E P Forward S Guard

Зауважте, що кожен рядок отриманого DataFrame містить рядок “Guard” принаймні в одному стовпці.

Ви також можете фільтрувати рядки, де один із кількох рядків з’являється принаймні в одному стовпці, використовуючи оператор «АБО» ( | ) у pandas.

Наприклад, наведений нижче код показує, як фільтрувати рядки, у яких принаймні в одному стовпці з’являється «P Guard» або «Center»:

 import numpy as np

#define filter
mask = np. column_stack ([df[col]. str . contains (r " P Guard|Center ", na= False ) for col in df])

#filter for rows where any column contains 'P Guard' or 'Center'
df. loc [mask. any (axis= 1 )]

        player first_role second_role
0 A P Guard S Guard
1 B P Guard S Guard
5 F Center S Forward
6 G Center P Forward
7 H Center P Forward

Зауважте, що кожен рядок отриманого DataFrame містить «P Guard» або «Center» принаймні в одному стовпці.

Примітка . Важливо включити аргумент na=False у функцію contain() , інакше ви зіткнетеся з помилкою , якщо значення NaN присутні у DataFrame.

Додаткові ресурси

У наступних посібниках пояснюється, як виконувати інші типові операції фільтрації в pandas:

Як відфільтрувати Pandas DataFrame за значеннями стовпців
Як фільтрувати рядки Pandas DataFrame за датою
Як відфільтрувати Pandas DataFrame за кількома умовами

Додати коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *