我想用空格或 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.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

关于python - 如何在 Pandas DataFrame 上用 NaN 替换整个单元格,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44954230/

10-14 19:28
查看更多