python-3.x 转换时间序列与15分钟在Pandas使用统计或任何其他方法

66bbxpm5  于 2023-02-01  发布在  Python
关注(0)|答案(1)|浏览(56)

我有一个Pandas的时间序列,看起来像这样:
时间=[时间戳("2021 - 01 - 01 05:30:00"),时间戳("2021 - 01 - 01 05:40:00"),时间戳("2021 - 01 - 01 05:50:00"),时间戳("2021 - 01 - 01 06:00:00"),时间戳("2021 - 01 - 01 06:10:00"),时间戳("2021 - 01 - 01 06:20:00"),时间戳("2021 - 01 - 01 06:30:00"),时间戳("2021 - 01 01 06:40:00"),时间戳(" 2021 - 01 01 06:50:00"),时间戳(" 2021 - 01 01 07:00:00")]
数值=[4.84、6.92、7.99、8.01、7.07、5.11、7.1、7.03、7.02、8.07]
我想转换时间序列与15分钟乘以步骤,是重新采样正确的方法?或任何其他方法(统计或任何)可用?假设有任何丢失的数据,我们如何处理这一点。

dgtucam1

dgtucam11#

我认为可以,使用Resampler.mean

s = pd.Series(value, index=time)
print (s.resample('15Min').mean())
2021-01-01 05:30:00    5.880
2021-01-01 05:45:00    7.990
2021-01-01 06:00:00    7.540
2021-01-01 06:15:00    5.110
2021-01-01 06:30:00    7.065
2021-01-01 06:45:00    7.020
2021-01-01 07:00:00    8.070
Freq: 15T, dtype: float64

或者如果需要Series.asfreq-仅提取15Min值:

print (s.asfreq('15Min'))
2021-01-01 05:30:00    4.84
2021-01-01 05:45:00     NaN
2021-01-01 06:00:00    8.01
2021-01-01 06:15:00     NaN
2021-01-01 06:30:00    7.10
2021-01-01 06:45:00     NaN
2021-01-01 07:00:00    8.07
Freq: 15T, dtype: float64

print (s.asfreq('15Min', method='ffill'))
2021-01-01 05:30:00    4.84
2021-01-01 05:45:00    6.92
2021-01-01 06:00:00    8.01
2021-01-01 06:15:00    7.07
2021-01-01 06:30:00    7.10
2021-01-01 06:45:00    7.03
2021-01-01 07:00:00    8.07
Freq: 15T, dtype: float64

假设有任何缺失数据,我们如何处理这一问题。
具有缺失值的样本数据:

Timestamp = pd.Timestamp
time = [Timestamp('2021-01-01 05:30:00'),Timestamp('2021-01-01 05:40:00'),
        Timestamp('2021-01-01 05:50:00'), Timestamp('2021-01-01 06:00:00'),
        Timestamp('2021-01-01 06:10:00'),Timestamp('2021-01-01 06:20:00'),
        Timestamp('2021-01-01 06:30:00'),Timestamp('2021-01-01 06:40:00'),
        Timestamp('2021-01-01 06:50:00'),Timestamp('2021-01-01 07:00:00')]

value = [4.84,np.nan,np.nan,8.01,7.07,5.11,7.1,7.03,7.02,8.07]
s = pd.Series(value, index=time)
print (s)
2021-01-01 05:30:00    4.84
2021-01-01 05:40:00     NaN
2021-01-01 05:50:00     NaN
2021-01-01 06:00:00    8.01
2021-01-01 06:10:00    7.07
2021-01-01 06:20:00    5.11
2021-01-01 06:30:00    7.10
2021-01-01 06:40:00    7.03
2021-01-01 06:50:00    7.02
2021-01-01 07:00:00    8.07
dtype: float64

如果需要,可使用Series.fillna替换原始Series所有值的mean

print (s.resample('15Min').mean())
2021-01-01 05:30:00    4.840
2021-01-01 05:45:00      NaN
2021-01-01 06:00:00    7.540
2021-01-01 06:15:00    5.110
2021-01-01 06:30:00    7.065
2021-01-01 06:45:00    7.020
2021-01-01 07:00:00    8.070
Freq: 15T, dtype: float64

print (s.resample('15Min').mean().fillna(s.mean()))
2021-01-01 05:30:00    4.84000
2021-01-01 05:45:00    6.78125
2021-01-01 06:00:00    7.54000
2021-01-01 06:15:00    5.11000
2021-01-01 06:30:00    7.06500
2021-01-01 06:45:00    7.02000
2021-01-01 07:00:00    8.07000
Freq: 15T, dtype: float64

如果使用第二种方法asfreq,则不填充原始数据中的缺失值:

print (s.asfreq('15Min', method='ffill'))
2021-01-01 05:30:00    4.84
2021-01-01 05:45:00     NaN
2021-01-01 06:00:00    8.01
2021-01-01 06:15:00    7.07
2021-01-01 06:30:00    7.10
2021-01-01 06:45:00    7.03
2021-01-01 07:00:00    8.07
Freq: 15T, dtype: float64

相关问题