意外的pandas.Series.replace()行为

时间:2016-11-17 19:16:19

标签: python pandas

鉴于此 -

import pandas as pd

s = pd.Series(['', '1', '2', '', '4', '', '6'])

为什么会这样 -

s.replace('', None).values

结果 -

array(['', '1', '2', '2', '4', '4', '6'], dtype=object)

我希望如此 -

array([None, '1', '2', None, '4', None, '6'], dtype=object)

1 个答案:

答案 0 :(得分:6)

使用None是有问题的。如果为参数传递None,它将使用默认值(docs):

  

     

types.NoneType的唯一值。没有人经常使用   表示缺少值,因为默认参数不是   传递给一个函数。

因此s.replace('', None)s.replace('')相同。显然,没有传递值时的默认操作是转发填充系列。相反,您可以使用np.nan:

pd.Series(['', '1', '2', '', '4', '', '6']).replace('', np.nan)
Out: 
0    NaN
1      1
2      2
3    NaN
4      4
5    NaN
6      6
dtype: object

或传递一个词典:

s.replace({'': None})
Out: 
0    None
1       1
2       2
3    None
4       4
5    None
6       6
dtype: object