看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gr99123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
(编码题)现有 1 小时采样的电量数据,需按不同粒度重新采样并观察值的变化。
源数据如下:
import pandas as pd
idx = pd.date_range('2023-09-01 08:00', periods=5, freq='h')
s = pd.Series([100, 110, 108, 115, 120], index=idx, name='kWh')
print(s)
输出:
2023-09-01 08:00:00 100
2023-09-01 09:00:00 110
2023-09-01 10:00:00 108
2023-09-01 11:00:00 115
2023-09-01 12:00:00 120
Freq: H, Name: kWh, dtype: int64
要求:
asfreq()
将序列改为 30 分钟 频率,缺失值用 .ffill
前向填充。期望结果:
30 min 升采样 (9 rows):
2023-09-01 08:00:00 100
...
2023-09-01 12:00:00 120
2 hour 降采样 (3 rows):
2023-09-01 08:00:00 100
2023-09-01 10:00:00 108
2023-09-01 12:00:00 120
代码如下:
import pandas as pd
idx = pd.date_range('2023-09-01 08:00', periods=5, freq='H')
s = pd.Series([100, 110, 108, 115, 120], index=idx, name='kWh')
# 1. 升采样 30 min,前向填充
ups = s.asfreq('30min').ffill()
print('30 min 升采样 (%d rows):' % len(ups))
print(ups)
# 2. 降采样 2 hour
downs = s.asfreq('2h')
print('\n2 hour 降采样 (%d rows):' % len(downs))
print(downs)
输出:
30 min 升采样 (9 rows):
2023-09-01 08:00:00 100
2023-09-01 08:30:00 100
2023-09-01 09:00:00 110
2023-09-01 09:30:00 110
2023-09-01 10:00:00 108
2023-09-01 10:30:00 108
2023-09-01 11:00:00 115
2023-09-01 11:30:00 115
2023-09-01 12:00:00 120
Freq: 30T, Name: kWh, dtype: int64
2 hour 降采样 (3 rows):
2023-09-01 08:00:00 100
2023-09-01 10:00:00 108
2023-09-01 12:00:00 120
Freq: 2H, Name: kWh, dtype: int64
asfreq()
按新频率重新生成索引:高频缺值可用 ffill
/bfill
填充;低频则直接取对应时间点的原始值,实现无损“变采样”。
(完)
更新时间:2025-09-14 15:15:28 标签:pandas python 时间 采样频率