簡體   English   中英

檢查 pandas 中是否至少有一列包含字符串

[英]Check if at least one column contains a string in pandas

我想檢查幾列是否包含一個字符串,並用結果生成一個 Boolean 列。 這對於單列很容易做到,但是當將此方法應用於多列時會產生屬性錯誤( AttributeError: 'DataFrame' object has no attribute 'str' )。

例子:

import pandas as pd

c1=[x+'x' for x in 'abcabc']
c2=['Y'+x+'m' for x in 'CABABC']
cols=['A','B']

df=pd.DataFrame(list(zip(c1,c2)),columns=cols)
df

回報:

    A   B
0   ax  YCm
1   bx  YAm
2   cx  YBm
3   ax  YAm
4   bx  YBm
5   cx  YCm

以下代碼在應用於單個列時有效,但在應用於多個列時無效。 我想要一些適合這里並給出預期結果的東西:

df['C']=df[cols].str.contains('c',case=False)

因此所需的 output 是:

    A   B   C
0   ax  YCm True
1   bx  YAm False
2   cx  YBm True
3   ax  YAm False
4   bx  YBm False
5   cx  YCm True

編輯:我更新了我的示例以反映實際搜索列是否“包含”一個值而不是“等於”該值的願望。

編輯:就時間而言,這是我希望能夠匹配或擊敗的基准,而無需創建新列(在我的玩具示例中對列使用*1000 ):

newcols=['temp_'+x for x in cols]

for col in cols:
    df['temp_'+col]=df[col].str.contains('c',case=False)

df['C']=df[newcols].any(axis=1)
df=df[['A','B','C']]

通過applymap的一個選項:

df['C'] = df.applymap(lambda x: 'c' in str(x).lower()).any(1)

通過stack/unstack

df['C'] = df.stack().str.contains('c', case=False).unstack().any(1)
df['C'] = df.stack().str.lower().str.contains('c').unstack().any(1)

OUTPUT:

    A    B      C
0  ax  YCm   True
1  bx  YAm  False
2  cx  YBm   True
3  ax  YAm  False
4  bx  YBm  False
5  cx  YCm   True

我會跨列運行應用程序並獲取其中的any()

df['C']=df.apply(lambda y: y.str.contains('c',case=False),1).any(1)

暫無
暫無

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

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