在熊猫数据框中设置多级索引更改日期时间
问题描述:
我有一个pandasDataFrame
包含一个datetime.date
列。当我设置多级索引时,日期列被转换为datetime.datetime
对象,这在设置单级索引时不会发生。这是正常的行为吗?如何定义保持date
类型的多级索引?在熊猫数据框中设置多级索引更改日期时间
import datetime
import pandas as pd
values = [("a", datetime.date(2015,1,1), 30.),
("a", datetime.date(2015,1,2), 25.)]
columns = ["id", "date", "amount"]
df = pd.DataFrame(values, columns=columns)
df_single = df.set_index("date")
df_multi = df.set_index(["id", "date"])
这里是输出:
print(df_multi.index)
# MultiIndex(levels=[['a'], [2015-01-01 00:00:00, 2015-01-02 00:00:00]],
# labels=[[0, 0], [0, 1]],
# names=['id', 'date'])
print(df_single.index)
# Index([2015-01-01, 2015-01-02], dtype='object', name='date')
有关信息,我使用的是以下版本:
- 的Python 3.4.5 |蟒蛇2.3.0
- 熊猫= = 0.19.2
答
让我们开始吧与您的第二个问题:
如何定义保持日期类型的多级索引?
解决方法:
是可能的替换索引的一部分。
df_multi.index.set_levels([df['date'].values], level=[1], inplace=True)
解决方法结果:所以在你的榜样,运用多指标后,datetime
可以用date
等取代
>>> print(df_multi.index)
MultiIndex(levels=[[u'a'], [2015-01-01, 2015-01-02]],
labels=[[0, 0], [0, 1]],
names=[u'id', u'date'])
为什么?
第一个问题:
这是一种正常的行为?
嗯,这是正常的,因为代码肯定是这样做的。这种行为是pandas.core.categorical.Categorical()
副作用这最终通过促进date
到datetime64
:
values = _possibly_infer_to_datetimelike(values, convert_dates=True)
我不知道,如果你看到的效果是由设计或没有,但你可以打开一个问题here。
谢谢!这个解决方法为我做了诀窍。但是,在我看来,这仍然是一个意想不到的副作用。我会开一个问题。 – ldocao
这是我发布的问题:https://github.com/pandas-dev/pandas/issues/15636 – ldocao