好的,我在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'>
答案 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'>