【发布时间】:2013-06-10 10:31:51
【问题描述】:
有没有什么方法可以在 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,但我想知道为什么数据框会以如此糟糕的方式运行。
在 Python 2.7 和 OS X 10.8 上的 pandas 0.12.0 dev 上测试。 Python 是一个 OS X 上的预安装版本,我使用 SciPy 安装了 pandas Superpack 脚本,供您参考。
【问题讨论】:
-
write_frame不会将NaNs 解析为nones 吗? -
是的。您遇到
InternalError: (1054, u"Unknown column 'nan' in 'field list'")错误。除了在执行write_frame方法之前将NaN转换为None之外,我不知道任何解决方案。 -
你用的是什么版本的熊猫?
-
Scipy 超级包发布开发?好的,我绝对认为你应该 raise this as an issue on github,不应该太难修复。
-
如果您从 CSV/Excel 读取此数据,您可以使用
na_values参数将这些值读取为 NaN。 More information in this answer.
标签: python pandas dataframe replace nan