麻烦NaNs:set_index()。reset_index()破坏数据

时间:2013-05-12 19:42:12

标签: indexing pandas nan

我读到NaN存在问题,但以下情况会导致数据实际损坏,而不是错误。这是一个错误吗?我错过了文档中的基本内容吗? 我希望第二个命令给出错误或给出与第一个命令相同的响应:

ipdb> df
    year  PRuid  QC       data
18  2007  nonQC   0  8.014261
19  2008  nonQC   0  7.859152
20  2010  nonQC   0  7.468260
21  1985     10 NaN  0.861403
22  1985     11 NaN  0.878531
23  1985     12 NaN  0.842704
24  1985     13 NaN  0.785877
25  1985     24   1  0.730625
26  1985     35 NaN  0.816686
27  1985     46 NaN  0.819271
28  1985     47 NaN  0.807050
ipdb> df.set_index(['year','PRuid','QC']).reset_index()
    year  PRuid  QC       data
0   2007  nonQC   0  8.014261
1   2008  nonQC   0  7.859152
2   2010  nonQC   0  7.468260
3   1985     10   1  0.861403
4   1985     11   1  0.878531
5   1985     12   1  0.842704
6   1985     13   1  0.785877
7   1985     24   1  0.730625
8   1985     35   1  0.816686
9   1985     46   1  0.819271
10  1985     47   1  0.807050

“QC”的值实际上是从NaN改为1,它应该是NaN。

顺便说一句,对称性我添加了“.reset_index()”,但数据损坏是由set_index引入的。

如果这很有趣,那么版本是:

pd.version
<module 'pandas.version' from '/usr/lib/python2.6/site-packages/pandas-0.10.1-py2.6-linux-x86_64.egg/pandas/version.pyc'>

1 个答案:

答案 0 :(得分:1)

所以这是一个错误。到2013年5月底,pandas 0.11.1应该与bug修复一起发布(参见关于这个问题的评论)。  与此同时,我避免在任何多索引中使用带有NaN的值,例如通过对“QC”列中的NaN使用其他一些标志值(-99)。