检查日期列是否包含每年的所有小时数

时间:2017-06-21 13:33:54

标签: python pandas

我经常需要以下列格式从网站下载每小时历史数据

`            date      A     B     C
 2011/01/01 00:00    100   200   300
 2011/01/01 01:00    105   210   330
 .....
 2012/12/31 23:00    200   400   500'

我遇到的一个问题是,在线数据有时会错过每年几小时/几天。我需要检查有多少以及缺少哪些日期来决定数据是否可用。

我通常只做df.groupby(by = df['date'].dt.yr)['dt'].count()并查看每年是否有8760(闰年为8784)并检查手动哪些天丢失。我想知道是否有人有类似的问题,并知道如何编写一段代码告诉我哪一年缺少了多少小时和哪些小时缺失。

1 个答案:

答案 0 :(得分:7)

使用asfreqdifference

df.asfreq('H').index.difference(df.index)

DatetimeIndex(['2011-01-01 02:00:00', '2011-01-01 03:00:00',
               '2011-01-01 04:00:00', '2011-01-01 05:00:00',
               '2011-01-01 06:00:00', '2011-01-01 07:00:00',
               '2011-01-01 08:00:00', '2011-01-01 09:00:00',
               '2011-01-01 10:00:00', '2011-01-01 11:00:00',
               ...
               '2012-12-31 13:00:00', '2012-12-31 14:00:00',
               '2012-12-31 15:00:00', '2012-12-31 16:00:00',
               '2012-12-31 17:00:00', '2012-12-31 18:00:00',
               '2012-12-31 19:00:00', '2012-12-31 20:00:00',
               '2012-12-31 21:00:00', '2012-12-31 22:00:00'],
              dtype='datetime64[ns]', name='date', length=17541, freq='H')