我想用空白或NaN來替換包含單詞的整個單元格。然而,當我試圖取代'1.25分紅'時,它變成了'1.25 NaN'。我想把整個細胞歸還爲'NaN'。任何想法如何在此工作?如何在熊貓上用NaN替換整個單元格DataFrame
4
A
回答
4
選項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.mask
在更換這整個事情conju與applymap
。
如果我將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
0
全部替換字符串:
df.apply(lambda x: pd.to_numeric(x, errors='coerce'))
+0
如果單元格是字符串而OP想要保持字符串呢? OP要求更換股息單元。你可以將其修改爲'df.mask(df.apply(lambda x:pd.to_numeric(x,errors ='coerce'))。isnull())',但是會遇到這個問題,它會掩蓋任何其他的字符串像「Cash」或「Shares」或類似的單元格。 – piRSquared
0
我會用applymap這樣
df.applymap(lambda x: 'NaN' if (type(x) is str and 'Dividend' in x) else x)
相關問題
- 1. DataFrame熊貓顯示NAN
- 2. 熊貓Dataframe NaN值被替換爲無值
- 3. 單元測試熊貓DataFrame
- 4. 如何在熊貓中重複單元格DataFrame
- 5. 如何有效地替換熊貓DataFrame上的值?
- 6. 熊貓DataFrame格式
- 7. 熊貓:使用正則表達式替換整個單元格的文本
- 8. 熊貓DataFrame替換NaT沒有
- 9. 從熊貓創建numpy NAN DataFrame
- 10. 如何使用替換對熊貓DataFrame進行採樣?
- 11. python,如何將熊貓系列轉換爲熊貓DataFrame?
- 12. 熊貓DataFrame分配格式
- 13. 轉換列表熊貓DataFrame
- 14. 熊貓dataframe轉換日期
- 15. 熊貓DataFrame類型轉換
- 16. 熊貓 - 用浮點數替換整數
- 17. 在熊貓數據框中用'nan'替換數字
- 18. 熊貓dataframe rolling_mean()如何做?
- 19. 熊貓DataFrame應用
- 20. 熊貓:寫入文件時將空單元格替換爲0
- 21. 熊貓DataFrame Seaborn
- 22. 熊貓數據框用NaN替換字符串使用pd.concat
- 23. 設置多索引熊貓DataFrame的特定單元格
- 24. 如何將OpenDocument電子表格轉換爲熊貓DataFrame?
- 25. 如何用python熊貓替換逗號?
- 26. 在大熊貓更換NaN值
- 27. 熊貓:DataFrame中的DataFrame
- 28. 熊貓數據框:用平均數替換NaN
- 29. 熊貓:使用列值的隨機採樣替換NaN
- 30. Python熊貓:重用存儲意味着要正確替換nan
'''pd.np.nan'''也可以得到同樣的結果,如果你不希望導入'''numpy'''明確。 – TrigonaMinima
嗨,它的作品!起初我把正則表達式設置爲False。那麼這意味着如果我們將regex設置爲True,它將取代整個單元格? –
@HaAnTran不!這意味着它將把這個問題解釋爲一個正則表達式。你仍然需要一個適當的模式。 「^」表示從字符串的開頭開始。 ''^。*''匹配字符串開頭的所有字符。 ''$''表示結束與字符串結尾的匹配。 ''。* $''匹配到字符串末尾的所有字符。最後,''。*。* Dividend。* $''匹配所有開頭的字符,中間有'Dividend',之後是任何字符。然後用'np.nan'替換整個事件 – piRSquared