首页 > 解决方案 > Python/Pandas:日期对象转换为多索引中的时间戳

问题描述

有没有办法使用 datetime.date 对象创建 MultiIndex 并且不将它们转换为时间戳?

如果我有以下元组:

travel = [('car', datetime.date(2021, 10, 1)),
 ('car', datetime.date(2021, 10, 2)),
 ('car', datetime.date(2021, 10, 3)),
 ('bus', datetime.date(2021, 10, 1))]

每个元组中的第二项是 datetime.date 对象,我创建了一个多索引:

ind = pd.MultiIndex.from_tuples(travel)

它们被转换为时间戳:

ind[0] = ('car', Timestamp('2021-10-01 00:00:00'))

如果我使用它来创建数据框,则在尝试引用该行时会出现错误:

df = pd.DataFrame(index = ind, columns = ['distance'])
df.loc[('car', datetime.date(2021, 10, 1))]

KeyError: datetime.date(2021, 10, 1)

但是,如果我将其转换为时间戳,则引用没有问题:

df.loc[('car', Timestamp('2021-10-01 00:00:00'))]

distance    NaN
Name: (car, 2021-10-01 00:00:00), dtype: object

我尝试如下重新构建索引,但没有运气,因为日期不是唯一值:

dates = [datetime.date(2021, 10, 1),
 datetime.date(2021, 10, 2),
 datetime.date(2021, 10, 3),
 datetime.date(2021, 10, 1)]

df.index = df.index.set_levels([df.index.levels[0], dates])

ValueError: Level values must be unique: [datetime.date(2021, 10, 1), datetime.date(2021, 10, 2), datetime.date(2021, 10, 3), datetime.date(2021, 10, 1)] on level 1

datetime.date 被独立地转换为时间戳,或者我是否使用元组或其他方法创建 MultiIndex。

标签: pythonpandasdatedatetime

解决方案


推荐阅读