强制对熊猫使用DatetimeIndex

时间:2019-01-06 15:49:04

标签: python python-3.x pandas date datetimeindex

我有以下Pandas数据框:

df.head()

输出

id  unplug_hourDateTime
0   2018-09-01 01:00:00+02:00
1   2018-03-01 01:00:00+02:00
2   2018-03-01 01:00:00+02:00
3   2018-04-01 01:00:00+02:00
4   2018-04-01 01:00:00+02:00

我的目标是根据每天发生的记录构建一个calmap图,因此我需要一个具有DatetimeIndex,TimedeltaIndex或PeriodIndex格式的索引的数据框。

我写了以下内容:

df['unplug_Date']=df['unplug_hourDateTime'].map(lambda x : x.date())
df_calmap=df['unplug_Date'].value_counts().to_frame()
df_calmap.head()

输出

               unplug_Date
2018-09-20   16562
2018-09-13   16288
2018-09-19   16288
2018-09-12   16092
2018-09-27   16074

乍一看,它看起来像我要找的东西,但是如果我使用Calapap包,然后执行calmap.calendarplot(df_calmap),则会收到一个错误,我认为这是由于索引格式所致。

  

AttributeError:“索引”对象没有属性“年份”

如何强制数据框将索引列用作DatetimeIndex? 我找到了this有趣的答案,但是我不明白如何将df = df.set_index(pd.DatetimeIndex(df['b']))与现有索引一起使用,而不是与新列一起使用。

1 个答案:

答案 0 :(得分:2)

calapap文档指出它将默认为每天总计,因此您不必将datetime字段更改为date字段。只需将您的unplug_hourDateTime列更改为datetime index,如下所示。我的示例使用方法链接,这意味着所有操作都可以一口气完成:

df_calmap = (df
    .assign(unplug_hourDateTime=pd.DatetimeIndex(df['unplug_hourDateTime']))
    .groupby('unplug_hourDateTime')
    .size()
    .to_frame('count')
)

calmap.calendarplot(df_calmap['count'])

当然,您也可以使用乔什·弗里德兰德的漂亮答案:

df.index = pd.DateTimeIndex(df.index)