将缺失的日期添加到熊猫数据框

发布于 2021-02-02 23:12:00

我的数据可以在给定日期包含多个事件,也可以在一个日期包含否事件。我接受这些事件,按日期计数并绘制它们。但是,当我绘制它们时,我的两个系列并不总是匹配。

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

在上面的代码中,idx变为30个日期范围。2019/09/01至2019/09/30但是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-2019     2
09-03-2019    10
09-06-2019     5
09-07-2019     1
关注者
0
被浏览
51
1 个回答
  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    你可以使用Series.reindex

    import pandas as pd
    
    idx = pd.date_range('09-01-2019', '09-30-2019')
    
    s = pd.Series({'09-02-2019': 2,
                   '09-03-2019': 10,
                   '09-06-2019': 5,
                   '09-07-2019': 1})
    s.index = pd.DatetimeIndex(s.index)
    
    s = s.reindex(idx, fill_value=0)
    print(s)
    

    输出

    2019-09-01     0
    2019-09-02     2
    2019-09-03    10
    2019-09-04     0
    2019-09-05     0
    2019-09-06     5
    2019-09-07     1
    2019-09-08     0
    ...
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看