Skip to main content
 首页 » 编程设计

python之在Python中的数据框的所有列中搜索字符串

2025年05月04日39sky-heaven

我正在尝试在数据框的所有列中查找一个字符串。

import pandas as pd 
df = pd.DataFrame([['a', 'b'], ['c', 'd'], ['e', 'a']], columns=["A", "B"]) 
 
for col in df: 
        df[col].str.contains('a') 
 
0     True 
1    False 
2    False 
Name: A, dtype: bool 
0    False 
1    False 
2     True 
Name: B, dtype: bool 

但是,上面的代码只返回 bool 值,并没有返回我想要的格式(以表格形式显示行和列),这可以在特定列中搜索时实现:

df[df.A == 'a'] 
 
   A  B 
0  a  b 

有人能帮忙吗?

请您参考如下方法:

创建 bool 值 DataFrame 并通过 DataFrame.any 检查每行至少一个 True并按 boolean indexing 过滤:

df = df[df.eq('a').any(axis=1)] 
print (df) 
   A  B 
0  a  b 
2  e  a 

详细信息:

print (df.eq('a')) 
       A      B 
0   True  False 
1  False  False 
2  False   True 
 
print(df.eq('a').any(axis=1)) 
0     True 
1    False 
2     True 
dtype: bool 

如果要检查 substring 使用 str.contains对于 boolean DataFrame:

df = pd.DataFrame([['ad', 'b'], ['c', 'd'], ['e', 'asw']], columns=["A", "B"]) 
print (df) 
    A    B 
0  ad    b 
1   c    d 
2   e  asw 
 
df = df[df.apply(lambda x: x.str.contains('a')).any(axis=1)] 

或applymap通过 in 进行元素明智的检查:

df = df[df.applymap(lambda x: 'a' in x).any(axis=1)] 
 
print (df) 
    A    B 
0  ad    b 
2   e  asw