我正在尝试使用偶尔包含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
编辑:我明白了这一点 - 所以这是预期的行为。
答案 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