带有NA和None值的pandas set_index似乎无法正常工作

时间:2015-08-07 15:48:47

标签: pandas indexing

我正在尝试使用偶尔包含NA和None的列来索引pandas DataFrame。这似乎是失败的。在下面的示例中,df0在索引3上具有(None,e)组合,但df1具有(NaN,e)。有什么建议吗?

import pandas as pd
import numpy as np

df0 = pd.DataFrame({'k1':['4',np.NaN,'6',None,np.NaN], 'k2':['a','d',np.NaN,'e',np.NaN], 'v':[1,2,3,4,5]})
df1 = df0.copy().set_index(['k1','k2'])

>>> df0
Out[3]: 
     k1   k2  v
0     4    a  1
1   NaN    d  2
2     6  NaN  3
3  None    e  4
4   NaN  NaN  5

>>> df1
Out[4]: 
         v
k1  k2    
4   a    1
NaN d    2
6   NaN  3
NaN e    4
    NaN  5

编辑:我明白了这一点 - 所以这是预期的行为。

1 个答案:

答案 0 :(得分:0)

这是预期的行为,None值正在转换为NaN,并且当值重复时,它未显示:

In [31]:    
df1.index

Out[31]:
MultiIndex(levels=[['4', '6'], ['a', 'd', 'e']],
           labels=[[0, -1, 1, -1, -1], [0, 1, -1, 2, -1]],
           names=['k1', 'k2'])

从上面你可以看到-1用于显示NaN值,就输出而言,如果你的df如下所示,则输出显示相同的行为:

In [34]:
df0 = pd.DataFrame({'k1':['4',np.NaN,'6',1,1], 'k2':['a','d',np.NaN,'e',np.NaN], 'v':[1,2,3,4,5]})
df1 = df0.copy().set_index(['k1','k2'])
df1

Out[34]:
         v
k1  k2    
4   a    1
NaN d    2
6   NaN  3
1   e    4
    NaN  5

您可以看到最后两行重复1