如果我在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中这样做?
答案 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