我想用空格或 NaN 替换包含图片中圈出的单词的整个单元格。但是,当我尝试替换例如“1.25 Dividend”时,结果显示为“1.25 NaN”。我想将整个单元格返回为“NaN”。知道如何解决这个问题吗?
最佳答案
选项 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
与 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
关于python - 如何在 Pandas DataFrame 上用 NaN 替换整个单元格,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44954230/