我想用空格或NaN替换包含图中带圆圈的单词的整个单元格。但是,当我尝试更换例如< 1.25 Dividend'原来是< 1.25 NaN'。我想把整个细胞归还为NaN'。知道如何处理这个吗?
答案 0 :(得分:4)
选项1
在替换
HibernateTransactionManager
来自评论
(使用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
选项2
另一种方法是将 0 1
0 1 NaN
1 3 4.0
2 5 NaN
与pd.DataFrame.mask
结合使用
如果我将applymap
传递给lambda
,以确定其中是否有任何单元格中包含applymap
。
'Dividend'
选项3
概念类似但使用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
/ stack
+ unstack
pd.Series.str.contains
答案 1 :(得分:0)
替换所有字符串:
df.apply(lambda x: pd.to_numeric(x, errors='coerce'))
答案 2 :(得分:0)
我会像这样使用applymap
df.applymap(lambda x: 'NaN' if (type(x) is str and 'Dividend' in x) else x)