簡體   English   中英

Pandas:替換字符串列值(等於、包含、大小寫)

[英]Pandas : Replace string column values (equal, contains, case)

我有如下數據農場。

ID   COUNTRY   GENDER    AGE  V1   V2   V3   V4   V5
1    1    1    53   APPLE     apple     bosck     APPLE123  xApple111t
2    2    2    51   BEKO beko SIMSUNG   SamsungO123    ttBeko111t
3    3    1    24   SAMSUNG   bosch     SEMSUNG   BOSC1123  uuSAMSUNG111t

如果列表中有相同的值或包含特定值,我想替換為 np.nan。 我在下面嘗試但出現錯誤。

remove_list = ['APPLE', 'BEKO']

remove_contain_list = ['SUNG', 'bosc']

df.iloc[:,4:].str.replace(remove_list, np.nan, case=False) # exact match & case sensitive
df.iloc[:,4:].str.contains(remove_contain_list, np.nan, case=False) # contain & case sensitive

我該如何解決這些問題?

您可以通過DataFrame.stack創建MultiIndex Series ,通過Series.isin使用小寫值和Series.str.contains獲取完全匹配和部分匹配的掩碼,用Series.mask替換(替換的默認值為NaN ,因此無需指定)和最后Series.unstack並分配回:

remove_list = ['APPLE', 'BEKO']
remove_contain_list = ['SUNG', 'bosc']

s = df.iloc[:,4:].stack(dropna=False)
m1 = s.str.lower().isin([x.lower() for x in remove_list])
m2 = s.str.contains('|'.join(remove_contain_list), case=False)
s = s.mask(m1 | m2)

df.iloc[:,4:] = s.unstack()
print (df)
   ID  COUNTRY  GENDER  AGE   V1   V2   V3        V4          V5
0   1        1       1   53  NaN  NaN  NaN  APPLE123  xApple111t
1   2        2       2   51  NaN  NaN  NaN       NaN  ttBeko111t
2   3        3       1   24  NaN  NaN  NaN       NaN         NaN

編輯:如果在Styler.apply中匹配,您可以將掩碼替換為背景顏色:

def color(x): 
    c1 = 'background-color: yellow'
    c = ''

    remove_list = ['APPLE', 'BEKO']
    remove_contain_list = ['SUNG', 'bosc']

    s = x.iloc[:,4:].stack(dropna=False)
    m1 = s.str.lower().isin([i.lower() for i in remove_list])
    m2 = s.str.contains('|'.join(remove_contain_list), case=False)
    m = m1| m2

    df1 = pd.DataFrame(c, index=x.index, columns=x.columns)
    mask = m.unstack(fill_value=False).reindex(x.columns, fill_value=False, axis=1)   
    df1 = df1.mask(mask, c1)
    return df1

df.style.apply(color,axis=None)

暫無
暫無

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

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