(Python)选择任何列中包含字符串的行?

(Python)选择任何列中包含字符串的行?,python,pandas,dataframe,Python,Pandas,Dataframe,我试图遍历一个数据帧,并返回任何列中包含字符串“x”的行 这就是我一直在尝试的 for col in df: rows = df[df[col].str.contains(searchTerm, case = False, na = False)] 但是,如果我搜索一个我知道存在的字符串并在更多行中,它最多只返回2行 如何确保它正在搜索每一列的每一行 编辑:我的最终目标是获取包含字符串searchTerm的单元格的行和列欢迎 同意所有的意见。通常,最好的做法是找到一种在Pandas

我试图遍历一个数据帧,并返回任何列中包含字符串“x”的行

这就是我一直在尝试的

for col in df:

     rows = df[df[col].str.contains(searchTerm, case = False, na = False)]
但是,如果我搜索一个我知道存在的字符串并在更多行中,它最多只返回2行

如何确保它正在搜索每一列的每一行

编辑:我的最终目标是获取包含字符串searchTerm的单元格的行和列

欢迎

同意所有的意见。通常,最好的做法是找到一种在Pandas/Numpy中实现所需内容的方法,而无需迭代行/列

如果目标是“在任何列包含值“x”的行中查找行”,那么实际操作要比您想象的简单得多

以下是一些数据:

将熊猫作为pd导入
df=pd.DataFrame({
“a”:范围(10),
‘b’:[‘x’、‘b’、‘c’、‘d’、‘x’、‘f’、‘g’、‘h’、‘i’、‘x’],
“c”:[假,假,真,真,真,假,假,真,真,真],
‘d’:[1,'x',3,4,5,6,7,8,'x',10]
})
打印(df)
a、b、c、d
0 x假1
11b假x
2 c真实的3
三维真实4
4 x真5
5 f假6
6克假7
7小时真实8
8 i真x
9乘10
因此,显然应该包括第0、1、4、8和9行

如果我们只做df='x',pandas会在整个数据帧中广播比较:

df=='x'
a、b、c、d
0错误-正确-错误-错误
1假假假真
2假假假假
3假假假假假
4假真假假
5假假假假假
6假假假假假
7假假假假假
8假假假真
9假真假假
但是pandas也有方便的
.any
方法,可以在任何维度中检查True。因此,如果我们想在所有列中进行检查,我们需要维度1:

rows=(df='x')。任意(轴=1)
打印(行)
0对
1正确
2错误
3错误
4正确
5错误
6错误
7错误
8正确
9正确
请注意,如果您希望您的解决方案真正区分大小写,就像您正在使用的
.str
方法一样,您可能需要一些更像:

rows=(df.applymap(lambda x:str(x).lower()='x')).any(axis=1)
正确的行在没有任何循环的情况下被标记。并且您将获得一个可用于索引原始数据帧的序列:


df.loc[行]
a、b、c、d
0 x假1
11b假x
4 x真5
8 i真x
9乘10
欢迎您

同意所有的评论。通常,最好的做法是找到一种方法,在Pandas/Numpy中实现您想要的内容,而不必迭代行/列

如果目标是“在任何列包含值“x”的行中查找行”,那么实际操作要比您想象的简单得多

以下是一些数据:

将熊猫作为pd导入
df=pd.DataFrame({
“a”:范围(10),
‘b’:[‘x’、‘b’、‘c’、‘d’、‘x’、‘f’、‘g’、‘h’、‘i’、‘x’],
“c”:[假,假,真,真,真,假,假,真,真,真],
‘d’:[1,'x',3,4,5,6,7,8,'x',10]
})
打印(df)
a、b、c、d
0 x假1
11b假x
2 c真实的3
三维真实4
4 x真5
5 f假6
6克假7
7小时真实8
8 i真x
9乘10
因此,显然应该包括第0、1、4、8和9行

如果我们只做df='x',pandas会在整个数据帧中广播比较:

df=='x'
a、b、c、d
0错误-正确-错误-错误
1假假假真
2假假假假
3假假假假假
4假真假假
5假假假假假
6假假假假假
7假假假假假
8假假假真
9假真假假
但是熊猫也有方便的
.any
方法,可以在任何维度检查True。因此,如果我们要检查所有列,我们需要维度1:

rows=(df='x')。任意(轴=1)
打印(行)
0对
1正确
2错误
3错误
4正确
5错误
6错误
7错误
8正确
9正确
请注意,如果您希望您的解决方案真正区分大小写,就像您正在使用的
.str
方法一样,您可能需要一些更像:

rows=(df.applymap(lambda x:str(x).lower()='x')).any(axis=1)
正确的行被标记,没有任何循环。您将得到一个系列,可用于索引原始数据帧:


df.loc[行]
a、b、c、d
0 x假1
11b假x
4 x真5
8 i真x
9乘10

您是在搜索完整的字符串值还是子字符串?如果是完整的字符串,则执行
rows=np.where(df.values=='x')[0]
。如果可以,请不要在数据帧中进行迭代。请与预期输出共享示例数据。您是否在搜索完整的字符串值或子字符串?如果是完整的字符串,则执行
rows=np.where(df.values=='x')[0]
。如果您能提供帮助,请不要迭代数据帧。请与预期输出共享示例数据