微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

是否有任何方法可以在Python中的Pandas中用None替换值?

你可以使用df.replace(‘pre’,’post’)并且可以用另一个值替换一个值,但是如果要替换为None值,则无法执行此操作,如果尝试,则会得到奇怪的结果.

所以这是一个例子:

df = DataFrame(['-',3,2,5,1,-5,-1,'-',9])
df.replace('-', 0)

返回成功的结果.

但,

df.replace('-', None)

返回以下结果:

0
0   - // this isn't replaced
1   3
2   2
3   5
4   1
5  -5
6  -1
7  -1 // this is changed to `-1`...
8   9

为什么会返回这么奇怪的结果?

由于我想将此数据帧倒入MysqL数据库,因此我无法将NaN值放入数据框中的任何元素中,而是想放置None.当然,您可以先将’ – ‘更改为NaN,然后​​将NaN转换为None,但我想知道为什么数据帧以如此可怕的方式运行.

Tested on pandas 0.12.0 dev on Python 2.7 and OS X 10.8. Python is a
pre-installed version on OS X and I installed pandas by using SciPy
Superpack script, for your @R_786_4045@ion.

解决方法:

实际上在更高版本的pandas中,这会产生一个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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐