Python 在数据帧中查找字符串值的索引

Python 在数据帧中查找字符串值的索引,python,pandas,Python,Pandas,如何识别数据框中的哪些列包含特定字符串'foo' 示例数据帧: 我想在这里找到B和D 我可以搜索数字: 如果我寻找的是数字(例如42)而不是字符串,我可以生成如下布尔掩码: >>> ~(df.where(df==42)).isnull().all() A True B False C False D False dtype: bool 但不是字符串: 如果可能的话,我不想迭代每一列和每一行(我的实际数据比这个例子要大得多)。感觉应该有一个简单有效的

如何识别数据框中的哪些列包含特定字符串
'foo'

示例数据帧: 我想在这里找到
B
D

我可以搜索数字: 如果我寻找的是数字(例如42)而不是字符串,我可以生成如下布尔掩码:

>>> ~(df.where(df==42)).isnull().all()

A     True
B    False
C    False
D    False
dtype: bool
但不是字符串: 如果可能的话,我不想迭代每一列和每一行(我的实际数据比这个例子要大得多)。感觉应该有一个简单有效的方法


如何执行此操作?

对底层数组数据执行单向操作-

df.columns[(df.values=='foo').any(0)].tolist()
样本运行-

In [209]: df
Out[209]: 
    A     B  C      D
0  10   foo  3   some
1  20   bar  4    foo
2  42  blah  5  thing

In [210]: df.columns[(df.values=='foo').any(0)].tolist()
Out[210]: ['B', 'D']
如果您只是在寻找列掩码-

In [205]: (df.values=='foo').any(0)
Out[205]: array([False,  True, False,  True], dtype=bool)

选项1
df.值

~(df.where(df.values=='foo')).isnull().all()

Out[91]: 
A    False
B     True
C    False
D     True
dtype: bool
选项2
isin

~(df.where(df.isin(['foo']))).isnull().all()
Out[94]: 
A    False
B     True
C    False
D     True
dtype: bool

不幸的是,它无法通过您提供的语法索引str。它必须作为一系列类型字符串运行,以将其与字符串进行比较,除非我遗漏了一些内容

试试这个

~df101.where(df101.isin(['foo'])).isnull().all()
A    False
B     True
C    False
D     True
dtype: bool

这里any()中的参数0表示axis=0,columns?@sheldonzy Yes,表示沿第一个轴(axis=0)查找if
any
匹配,这是每列。我在写之前没有看到它:/
~(df.where(df.isin(['foo']))).isnull().all()
Out[94]: 
A    False
B     True
C    False
D     True
dtype: bool
~df101.where(df101.isin(['foo'])).isnull().all()
A    False
B     True
C    False
D     True
dtype: bool