一尘不染

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

python

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

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

阅读 304

收藏
2020-02-22

共1个答案

一尘不染

你可以使用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
...
2020-02-22