繁体   English   中英

填写Pandas数据框中的缺失时间

[英]Filling in missing hours in a Pandas dataframe

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电子表格,其中包含一年中每天的每小时太阳辐照度测量值。 它具有3列,即Date_NZST,Time_NZST和Radiation_Amount_MJ / m2。

我正在尝试寻找一种方法来自动查找所有丢失的小时数,为该丢失的小时数生成一行,并在Radiation_Amount_MJ / m2列中用-符号填充它。 例如,缺少13:00,因此我想在12:00和14:00之间的行中输入正确的日期,并在-Radiation_Amount_MJ / m2列中填入-。 所有的日期都存在,只剩下几个小时。

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

我一直在Excel中进行此操作,但这是一个非常繁琐的过程,可能会丢失数百个要点。 我试图使用Python中的Pandas库来做到这一点,并且看到了这个线程( 在pandas数据框中填写丢失的小时数 ),我试图更改答案代码以适合我的数据,但是我对这一行感到非常困惑

df.groupby('area').\
    apply(lambda x : x.set_index('Datetime').resample('H').mean().fillna(0)).\
      reset_index()'

以及如何将其重新用于我的数据。 有人有想法么?

首先,我们创建一个datetime索引,其中包含带有pd.to_datetime的日期和时间。

然后我们使用resample得到每小时的数据,并使用fillna ,以填补缺失的vallues用-

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('-')

产量

                   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

如果您希望日期时间不在索引中,请使用df.reset_index()


注意 ,通过在数字列中填充- ,可以将其转换为object类型。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM