None在Python中的Pandas中,是否有任何方法可以替换值?您可以使用df.replace('pre', 'post')并可以用另一个值替换它,但是如果要替换为None值,则无法完成此操作,如果尝试使用该值,则会得到一个奇怪的结果。所以这是一个例子:df = DataFrame(['-',3,2,5,1,-5,-1,'-',9])df.replace('-', 0)返回成功的结果。但,df.replace('-', None)返回以下结果:00 - // this isn't replaced1 32 23 54 15 -56 -17 -1 // this is changed to `-1`...8 9为什么会返回如此奇怪的结果?由于我想将此数据框倒入MySQL数据库,因此我不能将NaN值放入数据框的任何元素中,而是要放置None。当然,您可以先更改'-'为NaN,然后再转换NaN为None,但是我想知道为什么数据框以这种可怕的方式起作用。已在Python 2.7和OS X 10.8的pandas 0.12.0开发人员上进行了测试。Python是OS X上的预装版本,我通过使用SciPy Superpack脚本安装了熊猫,以供参考。
3 回答

料青山看我应如是
TA贡献1772条经验 获得超8个赞
实际上,在更高版本的熊猫中,这将产生TypeError:
df.replace('-', None)
TypeError: If "to_replace" and "value" are both None then regex must be a mapping
您可以通过传递列表或字典来做到这一点:
In [11]: df.replace('-', df.replace(['-'], [None]) # or .replace('-', {0: None})
Out[11]:
0
0 None
1 3
2 2
3 5
4 1
5 -5
6 -1
7 None
8 9
但我建议使用NaN而不是使用None:
In [12]: df.replace('-', np.nan)
Out[12]:
0
0 NaN
1 3
2 2
3 5
4 1
5 -5
6 -1
7 NaN
8 9

湖上湖
TA贡献2003条经验 获得超2个赞
我更喜欢使用replace
带有a的解决方案,dict
因为它既简单又优雅:
df.replace({'-': None})
您还可以有更多替代品:
df.replace({'-': None, 'None': None})
即使是较大的替换,也总是显而易见的,什么替换了-我认为对于长列表来说,这要困难得多。
添加回答
举报
0/150
提交
取消