对“ pandas”系列重新采样时每天保持24小时(从每天到每小时)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对“ pandas”系列重新采样时每天保持24小时(从每天到每小时)相关的知识,希望对你有一定的参考价值。

我有一个pandas Series,并且每天都有一个值(以tz为单位定位的DateTimeIndex

tmpr
Out[38]: 
2018-01-01 00:00:00+01:00    1.810
2018-01-02 00:00:00+01:00    2.405
2018-01-03 00:00:00+01:00    1.495
2018-01-04 00:00:00+01:00    1.600
2018-01-05 00:00:00+01:00    0.545

2020-12-27 00:00:00+01:00    2.655
2020-12-28 00:00:00+01:00    1.705
2020-12-29 00:00:00+01:00    1.255
2020-12-30 00:00:00+01:00    1.405
2020-12-31 00:00:00+01:00    3.000
Freq: D, Name: tmpr, Length: 1096, dtype: float64

我想将其上采样为小时值,以便每个值重复24次(或23或25,取决于夏季/冬季转换,但这完全是另一回事了)。这是我尝试过的:

tmpr.resample('h').ffill()
Out[39]: 
2018-01-01 00:00:00+01:00    1.810
2018-01-01 01:00:00+01:00    1.810
2018-01-01 02:00:00+01:00    1.810
2018-01-01 03:00:00+01:00    1.810
2018-01-01 04:00:00+01:00    1.810

2020-12-30 20:00:00+01:00    1.405
2020-12-30 21:00:00+01:00    1.405
2020-12-30 22:00:00+01:00    1.405
2020-12-30 23:00:00+01:00    1.405
2020-12-31 00:00:00+01:00    3.000
Freq: H, Name: tmpr, Length: 26281, dtype: float64

问题是最后一天:我无法让resample包含0:00之后的23小时。

添加closed参数没有区别,无论是重采样还是创建原始时间序列。

((我尝试用左或右闭合索引创建原始的Seriespd.date_range(start=pd.Timestamp(2018, 1, 1), end=pd.Timestamp(2021, 1, 1), freq='D', closed='left')... end=pd.Timestamp(2020, 12, 31),但所得的级数似乎相同。)

我总是可以在附加日期(2021-01-01)后面附加一个虚拟值,然后在最后将其删除,但这确实很糟糕。

关于如何按预期方式执行此操作的任何想法?

PS-在以前的项目中,使用PeriodIndex而不是DateTimeIndex,我没有问题。但是,我不能在这里使用它,因为它们不支持我确实需要的时区功能。

答案

由于您的数据是每天的数据,因此您只需创建新的时间戳reindex

new_timestamps = pd.date_range(tmpr.index[0], 
                          tmpr.index[-1]+pd.to_timedelta('23H'),
                          freq='H')

tmpr.reindex(new_timestamps).ffill()

输出(用于示例数据的前半部分):

2018-01-01 00:00:00+01:00    1.810
2018-01-01 01:00:00+01:00    1.810
2018-01-01 02:00:00+01:00    1.810
2018-01-01 03:00:00+01:00    1.810
2018-01-01 04:00:00+01:00    1.810
                             ...  
2018-01-05 19:00:00+01:00    0.545
2018-01-05 20:00:00+01:00    0.545
2018-01-05 21:00:00+01:00    0.545
2018-01-05 22:00:00+01:00    0.545
2018-01-05 23:00:00+01:00    0.545
Freq: H, Name: tmpr, Length: 120, dtype: float64

以上是关于对“ pandas”系列重新采样时每天保持24小时(从每天到每小时)的主要内容,如果未能解决你的问题,请参考以下文章

当所有值都是 NaN 时,Pandas 重新采样以返回 NaN

Pandas 将 5 分钟数据重新采样为每小时平均值:日期问题 [重复]

按小时重新采样 Pandas DataFrame 并使用 Plotly 绘制堆积条形图

Pandas 将时间序列数据重新采样为 15 分钟和 45 分钟 - 使用多索引或列

如何对具有多列的df重新采样

Pandas 在日期列上重新采样