为pandas数据帧添加缺少日期

为pandas数据帧添加缺少日期

我的数据可以在给定日期有多个事件,也可以在某个日期没有事件。我参加这些活动,按日期计算并绘制它们。但是,当我绘制它们时,我的两个系列并不总是匹配。


idx = pd.date_range(df['simpleDate'].min(), df['simpleDate'].max())

s = df.groupby(['simpleDate']).size()

在上面的代码中,idx成为30个日期的范围。S 01-01-2013至09-30-2013但是S可能只有25天或26天,因为在给定日期没有发生任何事件。然后,当我尝试绘制时,我得到一个AssertionError,因为大小不匹配:


fig, ax = plt.subplots()    

ax.bar(idx.to_pydatetime(), s, color='green')

解决这个问题的正确方法是什么?我是否要删除IDX中没有值的日期或(我宁愿这样做)将系列添加到缺少日期的计数为0.我宁愿拥有30天的完整图表,其中包含0值。如果这种方法是正确的,那么有关如何开始的任何建议?我需要某种动态reindex功能吗?


这是一个S(df.groupby(['simpleDate']).size() )的片段,注意没有04和05的条目。


09-02-2013     2

09-03-2013    10

09-06-2013     5

09-07-2013     1


慕虎7371278
浏览 472回答 3
3回答

拉莫斯之舞

更快的解决方法是使用.asfreq()。这不需要创建一个新的索引来调用.reindex()。# "broken" (staggered) datesdates = pd.Index([pd.Timestamp('2012-05-01'),                   pd.Timestamp('2012-05-04'),                   pd.Timestamp('2012-05-06')])s = pd.Series([1, 2, 3], dates)print(s.asfreq('D'))2012-05-01    1.02012-05-02    NaN2012-05-03    NaN2012-05-04    2.02012-05-05    NaN2012-05-06    3.0Freq: D, dtype: float64
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python