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 по нескольким условиям