簡體   English   中英

如何在pandas DataFrame上用NaN替換整個單元格

[英]How to replace an entire cell with NaN on pandas DataFrame

我想用空格或NaN替換包含圖中帶圓圈的單詞的整個單元格。 然而,當我嘗試更換例如'1.25 Dividend'時,結果卻是'1.25 NaN'。 我想把整個細胞歸還為'NaN'。 知道如何處理這個嗎?

我的DataFrame

選項1
在替換中使用正則表達式

df.replace('^.*Dividend.*$', np.nan, regex=True)

來自評論

(使用regex=True )意味着它會將問題解釋為正則表達式。 你仍然需要一個合適的模式。 '^'表示從字符串的開頭開始。 '^.*'匹配字符串開頭的所有字符。 '$'表示以字符串結尾結束匹配。 '.*$'匹配字符串末尾的所有字符。 最后, '^.*Dividend.*$'從頭開始匹配所有字符,在中間某處有'Dividend' ,然后在它后面有任何字符。 然后用np.nan替換整個東西

考慮數據幀df

df = pd.DataFrame([[1, '2 Dividend'], [3, 4], [5, '6 Dividend']])
df

   0           1
0  1  2 Dividend
1  3           4
2  5  6 Dividend

然后提出的解決方案產生

   0    1
0  1  NaN
1  3  4.0
2  5  NaN

選項2
另一種方法是將pd.DataFrame.maskapplymap結合使用。
如果我將lambda傳遞給applymap ,以確定是否有任何單元格中有'Dividend'

df.mask(df.applymap(lambda s: 'Dividend' in s if isinstance(s, str) else False))

   0    1
0  1  NaN
1  3    4
2  5  NaN

選項3
在概念上類似,但使用stack / unstack + pd.Series.str.contains

df.mask(df.stack().astype(str).str.contains('Dividend').unstack())

   0    1
0  1  NaN
1  3    4
2  5  NaN

替換所有字符串:

df.apply(lambda x: pd.to_numeric(x, errors='coerce'))

我會像這樣使用applymap

df.applymap(lambda x: 'NaN' if (type(x) is str and 'Dividend' in x) else x)

暫無
暫無

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

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