簡體   English   中英

最簡潔的方法是 select 行,其中任何列包含 Pandas dataframe 中的字符串?

[英]Most concise way to select rows where any column contains a string in Pandas dataframe?

select 中任何列包含 Pandas dataframe 中的字符串的所有行的最簡潔方法是什么?

例如,給定以下 dataframe 到 select 任何列中的值包含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)] . 有更簡單的解決方案嗎?

至關重要的是,我想檢查任何列中的匹配項,而不是特定列中的匹配項。 據我所知,其他類似的問題只針對單個列或列列表。

這個問題沒有得到答案..但是問題本身和評論已經得到了答案,這對我來說非常有效..我在其他任何地方都找不到答案。

所以我只是將答案復制粘貼給那些覺得它有用的人。 我為不區分大小寫的搜索添加了 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)

df.apply在處理大量(數百萬)行時太慢了。 尋找別的東西。

如果你不喜歡申請:

df.stack()[df.stack().str.contains("b")]

回報

1  z    baz
2  x    bar
dtype: object

和上面類似的原始表屬性:

df.stack()[df.stack().str.contains("b")].reset_index().pivot(index="level_0", columns="level_1").droplevel(0, 1)
1級 X z
1個 鈉鹽 巴茲
2個 酒吧 鈉鹽

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM