Pandas: поиск строки во всех столбцах dataframe


Вы можете использовать следующий синтаксис для поиска определенной строки в каждом столбце DataFrame pandas и фильтрации строк, содержащих эту строку хотя бы в одном столбце:

 #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

Предположим, у нас есть следующий 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

Следующий код показывает, как фильтровать DataFrame pandas для строк, в которых строка «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 в функцию contains() , иначе вы столкнетесь с ошибкой , если значения NaN присутствуют в DataFrame.

Дополнительные ресурсы

В следующих руководствах объясняется, как выполнять другие распространенные операции фильтрации в pandas:

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *