【发布时间】:2016-12-23 03:50:29
【问题描述】:
在 Pandas 数据框中选择任何列包含字符串的所有行的最简洁方法是什么?
例如,给定以下数据框,选择任何列中的值包含 b 的行的最佳方法是什么?
df = pd.DataFrame({
'x': ['foo', 'foo', 'bar'],
'y': ['foo', 'foo', 'foo'],
'z': ['foo', 'baz', 'foo']
})
我对 Pandas 没有经验,到目前为止我想出的最好的方法是相当麻烦的 df[df.apply(lambda r: r.str.contains('b').any(), axis=1)]。有没有更简单的解决方案?
重要的是,我想检查 any 列中的匹配项,而不是特定列。其他类似的问题,据我所知,只能解决一个列或列列表。
【问题讨论】:
-
.str.contains是在 pd.Series 上定义的一种方法,因此您似乎需要以一种或另一种方式使用 apply 或某种循环。可能会有一些黑客用 NaN 替换 b 并基于此删除,但您的方式似乎更清晰。 -
您也可以这样做
df[df.sum(axis=1).str.contains('b')]但我不认为这种行为是可靠的。我也不认为这是重复的。 -
df[df.apply(lambda row: row.astype(str).str.contains('b').any(), axis=1)]负责处理非字符串列、nans 等。