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

Tim*_*kel 3 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)

ayh*_*han 6

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

没有

types.NoneType的唯一值.None通常用于表示缺少值,因为默认参数未传递给函数.

所以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
Run Code Online (Sandbox Code Playgroud)

或通过一个字典:

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