最简洁的方法来选择任何列包含Pandas数据帧中的字符串的行?

Rea*_*son 10 python pandas

选择Pandas数据框中任何列包含字符串的所有行的最简洁方法是什么?

例如,给定以下数据框,选择任何列中的值包含的行的最佳方法是b什么?

df = pd.DataFrame({
    'x': ['foo', 'foo', 'bar'],
    'y': ['foo', 'foo', 'foo'],
    'z': ['foo', 'baz', 'foo']
})
Run Code Online (Sandbox Code Playgroud)

我对熊猫没有经验,到目前为止我提出的最好的是相当麻烦的df[df.apply(lambda r: r.str.contains('b').any(), axis=1)].有更简单的解决方案吗?

关键的是,我想检查任何列中的匹配项,而不是特定列.我能说的其他类似问题只能解决一个列或一列列.

ihi*_*wer 11

这个问题没有给出答案..但是问题本身和评论已经得到了答案,这对我来说非常有效..而且我没有找到答案.

所以我只是复制粘贴答案给那些能发现它有用的人.我为case不敏感的serach添加了case = False

来自@Reason的解决方案:

到目前为止,我提出的最好的是相当麻烦的

这个对我有用.

df[df.apply(lambda r: r.str.contains('b', case=False).any(), axis=1)] 
Run Code Online (Sandbox Code Playgroud)

来自@rbinnun的解决方案:

这个对我来说是一个测试数据集..但对于一些真实的数据集..它返回了如下的unicode错误,但通常也是一个很好的解决方案我认为

df[df.apply(lambda row: row.astype(str).str.contains('b', case=False).any(), axis=1)]

负责非字符串列,nans等.

UnicodeEncodeError: 'ascii' codec can't encode character u'\xae' in position 5: ordinal not in range(128)
Run Code Online (Sandbox Code Playgroud)