选择Pandas数据框中任何列包含字符串的所有行的最简洁方法是什么?
例如,给定以下数据框,选择任何列中的值包含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)]
。有更简单的解决方案吗?
重要的是,我想检查任何列中的匹配项,而不是特定列。我能说的其他类似问题只能解决一个列或一列列。
答案 0 :(得分:5)
这个问题没有给出答案..但是问题本身和评论已经得到了答案,这对我来说非常有用......而且我看不到任何答案。< / em>的
所以我只是复制粘贴答案给那些能发现它有用的人。我为case不敏感的serach添加了case = False
来自@Reason的解决方案:
到目前为止,我提出的最好的是相当麻烦的
这个对我有用。
df[df.apply(lambda r: r.str.contains('b', case=False).any(), axis=1)]
来自@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)
答案 1 :(得分:0)
df.apply
在处理大量(数百万)行时太慢了。寻找其他东西。