如何在pandas DataFrame上用NaN替换整个单元格

时间:2017-07-06 16:20:01

标签: python pandas

我想用空格或NaN替换包含图中带圆圈的单词的整个单元格。但是,当我尝试更换例如< 1.25 Dividend'原来是< 1.25 NaN'。我想把整个细胞归还为NaN'。知道如何处理这个吗?

My DataFrame

3 个答案:

答案 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)