Python 通过添加开始和结束日期扩展数据帧,并用时间戳和NaN填充它

Python 通过添加开始和结束日期扩展数据帧,并用时间戳和NaN填充它,python,pandas,timestamp,Python,Pandas,Timestamp,我得到了以下数据: data timestamp 2012-06-01 17:00:00 9 2012-06-01 20:00:00 8 2012-06-01 13:00:00 9 2012-06-01 10:00:00 9 要按时间降序排序,请在数据的顶部和底部添加开始日期和结束日期,以便如下所示: data timestamp 2012-06-01 00:00:0

我得到了以下数据:

                        data
timestamp
2012-06-01 17:00:00     9
2012-06-01 20:00:00     8
2012-06-01 13:00:00     9
2012-06-01 10:00:00     9
要按时间降序排序,请在数据的顶部和底部添加开始日期和结束日期,以便如下所示:

                        data
timestamp
2012-06-01 00:00:00     NaN
2012-06-01 10:00:00     9
2012-06-01 13:00:00     9
2012-06-01 17:00:00     9
2012-06-01 20:00:00     8
2012-06-02 00:00:00     NaN
最后,我想扩展数据集,以一个小时的步骤覆盖从开始到结束的所有小时,用缺少的时间戳填充数据帧,其中包含“None”/“NaN”作为数据。 到目前为止,我有以下代码:

df2 = pd.DataFrame({'data':temperature, 'timestamp': pd.DatetimeIndex(timestamp)}, dtype=float)
df2.set_index('timestamp',inplace=True)
df3 = pd.DataFrame({ 'timestamp': pd.Series([ts1, ts2]), 'data': [None, None]})
df3.set_index('timestamp',inplace=True)
print(df3)
merged = df3.append(df2)
print(merged)
使用以下打印输出:

df3:
                     data
timestamp                
2012-06-01 00:00:00     None
2012-06-02 00:00:00     None


merged:
                     data
timestamp                
2012-06-01 00:00:00     NaN
2012-06-02 00:00:00     NaN
2012-06-01 17:00:00     9
2012-06-01 20:00:00     8
2012-06-01 13:00:00     9
2012-06-01 10:00:00     9
我试过:

merged = merged.asfreq('H')
但结果令人不满意:

                     data
2012-06-01 00:00:00   NaN
2012-06-01 01:00:00   NaN
2012-06-01 02:00:00   NaN
2012-06-01 03:00:00   NaN
2012-06-01 04:00:00   NaN
2012-06-01 05:00:00   NaN
2012-06-01 06:00:00   NaN
2012-06-01 07:00:00   NaN
2012-06-01 08:00:00   NaN
2012-06-01 09:00:00   NaN
2012-06-01 10:00:00     9
数据帧的其余部分在哪里?为什么它只包含第一个有效值之前的数据


非常感谢你的帮助。提前感谢

首先创建一个空数据框,其中包含您想要的时间戳索引,然后与原始数据集进行左合并:

df2 = pd.DataFrame(index = pd.date_range('2012-06-01','2012-06-02', freq='H'))
df3 = pd.merge(df2, df, left_index = True, right_index = True, how = 'left')
df3 
Out[103]: 
                               timestamp  value
2012-06-01 00:00:00                  NaN    NaN
2012-06-01 01:00:00                  NaN    NaN
2012-06-01 02:00:00                  NaN    NaN
2012-06-01 03:00:00                  NaN    NaN
2012-06-01 04:00:00                  NaN    NaN
2012-06-01 05:00:00                  NaN    NaN
2012-06-01 06:00:00                  NaN    NaN
2012-06-01 07:00:00                  NaN    NaN
2012-06-01 08:00:00                  NaN    NaN
2012-06-01 09:00:00                  NaN    NaN
2012-06-01 10:00:00  2012-06-01 10:00:00      9
2012-06-01 11:00:00                  NaN    NaN
2012-06-01 12:00:00                  NaN    NaN
2012-06-01 13:00:00  2012-06-01 13:00:00      9
2012-06-01 14:00:00                  NaN    NaN
2012-06-01 15:00:00                  NaN    NaN
2012-06-01 16:00:00                  NaN    NaN
2012-06-01 17:00:00  2012-06-01 17:00:00      9
2012-06-01 18:00:00                  NaN    NaN
2012-06-01 19:00:00                  NaN    NaN
2012-06-01 20:00:00  2012-06-01 20:00:00      8
2012-06-01 21:00:00                  NaN    NaN
2012-06-01 22:00:00                  NaN    NaN
2012-06-01 23:00:00                  NaN    NaN
2012-06-02 00:00:00                  NaN    NaN

有点晚了,但迟做总比不做好:非常感谢,这有助于我解决问题!