Python 在数据框中填充丢失的小时数
我有一个Excel电子表格,其中包含一年中每天每小时测量的太阳辐照度。它有3列,日期、时间和辐射量 我试图找到一种方法来自动查找所有缺失的小时数,为缺失的小时数生成一行,并在辐射量每平方米列中填充一个-符号。例如,缺少13:00小时,因此我想在12:00和14:00之间的行中填入正确的日期,并用-。所有日期都存在,只是少了几个小时Python 在数据框中填充丢失的小时数,python,pandas,Python,Pandas,我有一个Excel电子表格,其中包含一年中每天每小时测量的太阳辐照度。它有3列,日期、时间和辐射量 我试图找到一种方法来自动查找所有缺失的小时数,为缺失的小时数生成一行,并在辐射量每平方米列中填充一个-符号。例如,缺少13:00小时,因此我想在12:00和14:00之间的行中填入正确的日期,并用-。所有日期都存在,只是少了几个小时 Date_NZST Time_NZST Radiation_Amount_MJ/m2 5/08/2011 0:00
Date_NZST Time_NZST Radiation_Amount_MJ/m2
5/08/2011 0:00 0
5/08/2011 1:00 0
5/08/2011 2:00 0
5/08/2011 3:00 0
5/08/2011 4:00 0
5/08/2011 5:00 0
5/08/2011 6:00 0
5/08/2011 7:00 0
5/08/2011 8:00 0
5/08/2011 9:00 0.37
5/08/2011 10:00 0.41
5/08/2011 11:00 1.34
5/08/2011 12:00 0.87
5/08/2011 14:00 1.69
5/08/2011 15:00 1.53
5/08/2011 16:00 1.14
5/08/2011 17:00 0.63
5/08/2011 18:00 0.08
5/08/2011 19:00 0
5/08/2011 20:00 0
5/08/2011 21:00 0
5/08/2011 22:00 0
5/08/2011 23:00 0
我一直在Excel中进行此操作,但这是一个非常繁琐的过程,可能会有数百个遗漏点。我尝试使用Python中的Pandas库来实现它,我看到了这个线程(),我试图修改答案代码以适合我的数据,但是我被这行代码弄糊涂了
5/08/2011 11:00 1.34
5/08/2011 12:00 0.87
5/08/2011 13:00 -
5/08/2011 14:00 1.69
5/08/2011 15:00 1.53
以及如何将其重新用于我的数据。有人有什么想法吗?首先,我们创建一个
datetime
索引,其中包含带有pd.to\u datetime
的日期+时间
然后我们使用重采样
获取每小时数据,并使用填充
用-
填充缺少的值:
df.groupby('area').\
apply(lambda x : x.set_index('Datetime').resample('H').mean().fillna(0)).\
reset_index()'
输出
df.set_index(pd.to_datetime(df['Date_NZST'] + ' ' + df['Time_NZST']), inplace=True)
df = df.drop(columns=['Date_NZST', 'Time_NZST'])
df = df.resample('H').first().fillna('-')
如果要从索引中删除日期时间,请使用df.reset\u index()
注意,通过在数字列中填写
-
,它将转换为对象
类型
Radiation_Amount_MJ/m2
2011-05-08 00:00:00 0
2011-05-08 01:00:00 0
2011-05-08 02:00:00 0
2011-05-08 03:00:00 0
2011-05-08 04:00:00 0
2011-05-08 05:00:00 0
2011-05-08 06:00:00 0
2011-05-08 07:00:00 0
2011-05-08 08:00:00 0
2011-05-08 09:00:00 0.37
2011-05-08 10:00:00 0.41
2011-05-08 11:00:00 1.34
2011-05-08 12:00:00 0.87
2011-05-08 13:00:00 -
2011-05-08 14:00:00 1.69
2011-05-08 15:00:00 1.53
2011-05-08 16:00:00 1.14
2011-05-08 17:00:00 0.63
2011-05-08 18:00:00 0.08
2011-05-08 19:00:00 0
2011-05-08 20:00:00 0
2011-05-08 21:00:00 0
2011-05-08 22:00:00 0
2011-05-08 23:00:00 0