为了账号安全,请及时绑定邮箱和手机立即绑定

在Pandas DataFrame中将无效值替换为None

在Pandas DataFrame中将无效值替换为None

蝴蝶不菲 2021-03-28 08:52:30
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


查看完整回答
反对 回复 2021-04-01
?
湖上湖

TA贡献2003条经验 获得超2个赞

我更喜欢使用replace带有a的解决方案,dict因为它既简单又优雅:

df.replace({'-': None})

您还可以有更多替代品:

df.replace({'-': None, 'None': None})

即使是较大的替换,也总是显而易见的,什么替换了-我认为对于长列表来说,这要困难得多。


查看完整回答
反对 回复 2021-04-01
  • 3 回答
  • 0 关注
  • 606 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号