熊猫多级索引搞乱类型?

时间:2018-04-13 07:55:20

标签: python pandas

好的,我在Pandas 0.21上,我试图理解以下奇怪的功能:

x = pd.Series(index=[[pd.Timestamp("2015-05-14").date()]], data=[20.0])
y = pd.Series(index=[pd.Timestamp("2015-05-14").date()], data=[21.0])

print(type(pd.Timestamp("2015-05-14").date()))
print(type(x.index.get_level_values(0)[0]))
print(type(y.index[0]))

这里我构建了两个系列x和y。两者都只有一个元素。 x有一个只有一个级别的MultiIndex。 y具有正常索引。 我希望所有的印刷语句都会产生

<class 'datetime.date'>

然而,介绍Multiindex是否会混淆这种类型? 我得到了

<class 'pandas._libs.tslib.Timestamp'>

1 个答案:

答案 0 :(得分:1)

由于性能原因date-likes转换为DatetimeIndex而出现问题,请参阅here

  

他们在多重索引级别中推断出date-likes(datetime.date,datetime.datetime,Timestamp)的方式不一致。这导致创建了一个对象dtyped Index而不是DatetimeIndex。 datetime.date是pandas中的第二类对象,因为它们没有有效表示。

     

如果你真的想要创建它,你可以这样做:

In [8]: pd.MultiIndex.from_arrays([Index([datetime.date(2013,1,1)]),['a']])
Out[8]: 
MultiIndex(levels=[[2013-01-01], [u'a']],
       labels=[[0], [0]])

所以在你的样本中:

mux = pd.MultiIndex.from_arrays([pd.Index([pd.Timestamp("2015-05-14").date()]),['a']])
print (mux)
MultiIndex(levels=[[2015-05-14], ['a']],
           labels=[[0], [0]])

x = pd.Series(index=mux, data=[20.0])
y = pd.Series(index=[pd.Timestamp("2015-05-14").date()], data=[21.0])

print(type(pd.Timestamp("2015-05-14").date()))
<class 'datetime.date'>

print(type(x.index.get_level_values(0)[0]))
<class 'datetime.date'>

print(type(y.index[0]))
<class 'datetime.date'>
相关问题