Python 选择数据框中任何列包含字符串的行的最简洁方法?
选择数据框中任何列包含字符串的所有行的最简洁方法是什么 例如,给定以下数据帧,选择任何列中的值包含aPython 选择数据框中任何列包含字符串的行的最简洁方法?,python,pandas,Python,Pandas,选择数据框中任何列包含字符串的所有行的最简洁方法是什么 例如,给定以下数据帧,选择任何列中的值包含ab的行的最佳方法是什么 df = pd.DataFrame({ 'x': ['foo', 'foo', 'bar'], 'y': ['foo', 'foo', 'foo'], 'z': ['foo', 'baz', 'foo'] }) 我对熊猫没有经验,到目前为止,我想到的最好的方法是相当麻烦的df[df.apply(lambda r:r.str.contains('b'
b
的行的最佳方法是什么
df = pd.DataFrame({
'x': ['foo', 'foo', 'bar'],
'y': ['foo', 'foo', 'foo'],
'z': ['foo', 'baz', 'foo']
})
我对熊猫没有经验,到目前为止,我想到的最好的方法是相当麻烦的df[df.apply(lambda r:r.str.contains('b').any(),axis=1)]
。有更简单的解决方案吗
关键是,我想检查任何列中的匹配项,而不是特定列中的匹配项。其他类似的问题,正如我所能说的,只针对一个或一列列 这个问题没有得到回答。。但是问题本身和评论已经得到了答案,这对我来说非常有效。。我在其他地方都找不到答案
所以我只是把答案复制粘贴给那些觉得有用的人。对于不区分大小写的serach,我添加了case=False
来自@Reason:
到目前为止,我想到的最好的方法是相当麻烦的
这个对我有用
来自@rbinnun的解决方案:
这个对我来说是一个测试数据集。。但是对于一些真实的数据集。。它返回了一个unicode错误,如下所示,但我认为这也是一个很好的解决方案
df[df.apply(lambda row:row.astype(str).str.contains('b',case=False).any(),axis=1)]
处理非字符串列、NAN等
UnicodeEncodeError: 'ascii' codec can't encode character u'\xae' in position 5: ordinal not in range(128)
df.apply
处理大量(数百万)行时速度太慢。寻找其他方法。.str.contains
是在pd.Series上定义的一种方法,因此您似乎需要以某种方式使用apply或某种循环。可能会有一些黑客将b替换为NaN并基于此删除,但您的方法似乎更清晰。您也可以执行df[df.sum(axis=1).str.contains('b')]
,但我认为这种行为不可靠。我也不认为这是重复的。df[df.apply(lambda row:row.astype(str).str.contains('b').any(),axis=1)]
处理非字符串列、NaN等。如果使用Python 2,第二个将尝试将列强制转换为ASCII字符串,因此出现unicode错误。转换为unicode
:df[df.apply(lambda行:row.astype(unicode).str.contains('b',case=False).any(),axis=1)]
UnicodeEncodeError: 'ascii' codec can't encode character u'\xae' in position 5: ordinal not in range(128)