在 pandas 中使用重采样时如何处理从夏令时到冬令时的变化

How to deal with change from summer to winter time when using resampling in pandas

我有一个要用于负载预测的数据框。数据每 15 分钟记录一次。我首先想通过计算每小时的平均值来重新采样数据。为此,我使用了 pandas 中的重采样功能 new_df = df['Load'].resample('1H').mean()

基本上这不是问题,只要时间数据关于冬夏时间是一致的。然而,当有一个开关时,这会出现问题(并且我得到一个类型错误)。所以在这里你可以看到显示从夏季到冬季时间变化的数据摘录

这里是从冬令时改为夏令时的数据:

在第一种情况下,某些小时值(02:00、02:15、02:30、02:45)存在 2 次,这就是为什么我在尝试重采样时出错的原因.在后一种情况下,缺少这些特定时间的值。现在我的问题是如何处理这个问题?有没有办法告诉 pandas 一个是夏令时,另一个是冬令时?在数据本身中,这通过添加“+02:00”或“+01:00”来表示,但这仍然是 pandas 的问题。或者您能考虑其他解决方案吗?一种天真的做法是在从夏令时更改为冬令时(第一种情况)时只删除 4 条数据记录,而在从冬令时更改为夏令时时复制前 4 条数据记录。

提示:没有人有想法或建议吗?其他人也应该会出现此问题。

您似乎有 Index 个时间戳(或可能是字符串),但没有 DatetimeIndex,因为 DatetimeIndex 无法保存具有异构时区信息的时间戳。

这很笨拙,所以我的建议是先创建一个合适的 DatetimeIndex,然后再进行任何您之后需要做的重采样。

这是一个带有混合时区时间戳的小型 DataFrame:

df = pd.DataFrame(
    [1, 2],
    index=pd.Index([pd.Timestamp('12:00:00+01:00'), pd.Timestamp('12:00:00+00:00')])
)

它没有 DatetimeIndex:

>>> df
                           0
2021-05-31 12:00:00+01:00  1
2021-05-31 12:00:00+00:00  2
>>> type(df.index)
<class 'pandas.core.indexes.base.Index'>

为了df构造一个DatetimeIndex,我们需要决定一个共同的时区,所以让我们使用UTC+0。

df.index = pd.to_datetime(df.index, utc=True)

DataFrame 现在看起来像这样并且有一个 DatetimeIndex:

>>> df
                           0
2021-05-31 11:00:00+00:00  1
2021-05-31 12:00:00+00:00  2
>>> type(df.index)
<class 'pandas.core.indexes.datetimes.DatetimeIndex'>

注意 2021-05-31 12:00:00+01:00 是如何变成 2021-05-31 11:00:00+00:00 的。