从数据中查找缺少的时间间隔

时间:2018-04-25 00:02:17

标签: python pandas

如果我在CSV文件中有一个日期列表,我想在当天的一小时时间内找到并添加缺少的时间间隔。

数据如下:

id  city     reading date 
33  US-Ohio  06/18/2011 23:00:00  
33  US-Ohio  06/19/2011 00:00:00  
33  US-Ohio  06/19/2011 01:00:00  
33  US-Ohio  06/19/2011 02:00:00  
33  US-Ohio  06/19/2011 06:00:00  
33  US-Ohio  06/19/2011 07:00:00  
33  US-Ohio  06/19/2011 08:00:00  
34  US-NYC   06/19/2011 06:00:00  
34  US-NYC   06/19/2011 08:00:00

因此,需要插入的缺失数据是

id  city     reading date 
33  US-Ohio  06/18/2011 23:00:00  
33  US-Ohio  06/19/2011 00:00:00  
33  US-Ohio  06/19/2011 01:00:00  
33  US-Ohio  06/19/2011 02:00:00  
             06/19/2011 03:00:00  
             06/19/2011 04:00:00  
33  US-Ohio  06/19/2011 06:00:00  
33  US-Ohio  06/19/2011 07:00:00  
33  US-Ohio  06/19/2011 08:00:00  
34  US-NYC   06/19/2011 06:00:00  
             06/19/2011 07:00:00  
34  US-NYC   06/19/2011 08:00:00  

我已经使用pandas将它转换为datetime,使用代码:

games['reading_date'] =  pd.to_datetime(games['reading_date'], format='%m/%d/%y %H:%M')

重复日期,因此设置索引和重新取样不起作用,因为不同城市的丢失时间不同,索引重复多次 我只需要添加这些缺少的每小时间隔并将所有其他列保持为空白。我怎么在python中这样做?

1 个答案:

答案 0 :(得分:0)

更新了更新数据集的答案:

按ID&组分组城市并应用asfreq功能。

df.groupby(['id', 'city'], as_index=False).apply(lambda x: x.set_index('reading date').asfreq('1H').reset_index())

# outputs:

                         id      city
  reading date
0 2011-06-18 23:00:00  33.0   US-Ohio
  2011-06-19 00:00:00  33.0   US-Ohio
  2011-06-19 01:00:00  33.0   US-Ohio
  2011-06-19 02:00:00  33.0   US-Ohio
  2011-06-19 03:00:00   NaN       NaN
  2011-06-19 04:00:00   NaN       NaN
  2011-06-19 05:00:00   NaN       NaN
  2011-06-19 06:00:00  33.0   US-Ohio
  2011-06-19 07:00:00  33.0   US-Ohio
  2011-06-19 08:00:00  33.0   US-Ohio
1 2011-06-19 06:00:00  34.0    US-NYC
  2011-06-19 07:00:00   NaN       NaN
  2011-06-19 08:00:00  34.0    US-NYC

编辑:原始答案

确保Column 1是日期时间。

然后,将索引设置为'列1'并使用pandas.DataFrame.asFreq

df['Column 1'] = pd.to_datetime(df['Column 1'])

df.set_index('Column 1').asfreq('1H')

# Returns:

                    Column 2
Column 1
2011-06-18 23:00:00        a
2011-06-19 00:00:00      NaN
2011-06-19 01:00:00        b
2011-06-19 02:00:00        c
2011-06-19 03:00:00      NaN
2011-06-19 04:00:00      NaN
2011-06-19 05:00:00        d
2011-06-19 06:00:00      NaN
2011-06-19 07:00:00        e
2011-06-19 08:00:00        f