Python 在数据框中填充丢失的小时数

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

我有一个Excel电子表格,其中包含一年中每天每小时测量的太阳辐照度。它有3列,日期、时间和辐射量

我试图找到一种方法来自动查找所有缺失的小时数,为缺失的小时数生成一行,并在辐射量每平方米列中填充一个-符号。例如,缺少13:00小时,因此我想在12:00和14: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