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 DataFrame,其中包含有关球队中各个篮球运动员的第一个角色和第二个角色的信息:

 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 中的“OR”运算符 ( | ) 过滤至少一列中出现多个字符串之一的行。

例如,以下代码显示如何过滤至少一列中出现“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”。

注意:在contains()函数中包含na=False参数非常重要,否则如果 DataFrame 中存在 NaN 值,您将遇到错误

其他资源

以下教程解释了如何在 pandas 中执行其他常见的过滤操作:

如何按列值过滤 Pandas DataFrame
如何按日期过滤 Pandas DataFrame 行
如何根据多个条件过滤 Pandas DataFrame

添加评论

您的电子邮箱地址不会被公开。 必填项已用*标注