Python 意外的.Series.replace()行为
鉴于此-Python 意外的.Series.replace()行为,python,pandas,Python,Pandas,鉴于此- 将熊猫作为pd导入 s=pd.系列([''1','2','4','6']) 为什么会这样- s.replace(“”,无)。值 结果是- array(['''1','2','2','4','4','6'],dtype=object) 我什么时候会想到这个- 数组([None,'1','2',None,'4',None,'6'],dtype=object)在这里使用None是有问题的。如果为参数传递None,它将使用该()的默认值: 没有 types.NoneType的唯一值。没有一个经
将熊猫作为pd导入
s=pd.系列([''1','2','4','6'])
为什么会这样-
s.replace(“”,无)。值
结果是-
array(['''1','2','2','4','4','6'],dtype=object)
我什么时候会想到这个-
数组([None,'1','2',None,'4',None,'6'],dtype=object)
在这里使用None是有问题的。如果为参数传递None,它将使用该()的默认值:
没有
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
现在使用
s.replace(['],[None]).values
,这与您想要的是一样的。这是完全混乱(和危险)的行为。库应该使用默认值的标记对象写入,例如replace(…,value=MISSING_TOKEN,),并且允许值为None。