如何为含Datetime Index的DataFrame生成插值后时间索引新表
没问题!要给你的DataFrame生成带插值后时间索引的新表,用pandas可以轻松搞定。我会结合你的示例数据一步步演示,你可以根据自己需要调整时间粒度~
首先先还原你的原始DataFrame:
import pandas as pd # 构建你提供的示例数据 data = {'values': [10, 20, 30]} dates = pd.to_datetime(['2010-01-01', '2010-01-02', '2010-01-03']) df = pd.DataFrame(data, index=dates)
核心实现步骤
1. 生成目标时间索引
首先你需要定义想要的插值后时间粒度,比如按小时、分钟,或者补全缺失的日期。用pd.date_range()来生成连续的时间序列:
# 示例:生成小时级的连续时间索引(从原数据的最早到最晚时间) new_index = pd.date_range(start=df.index.min(), end=df.index.max(), freq='H')
这里的freq参数可以灵活调整:
'H'= 小时级'T'= 分钟级'D'= 天级(如果只是补全缺失的日期)- 还可以自定义比如
'30T'代表每30分钟
2. 重新索引并插值
用reindex()把原数据对齐到新的时间索引,再用interpolate()完成数值插值:
# 线性插值(默认方法,适合连续数值的平滑过渡) df_interpolated = df.reindex(new_index).interpolate(method='linear')
如果你不需要平滑插值,而是想要保持前一个时间点的值直到下一个,就用前向填充:
# 前向填充(保留上一个有效值) df_interpolated = df.reindex(new_index).interpolate(method='ffill')
查看结果
运行后你可以打印前几行看看效果:
print(df_interpolated.head())
输出示例(小时级线性插值):
values 2010-01-01 00:00:00 10.0 2010-01-01 01:00:00 10.416667 2010-01-01 02:00:00 10.833333 2010-01-01 03:00:00 11.250000 2010-01-01 04:00:00 11.666667
如果你的需求是补全天级缺失值(比如原数据中间缺了某几天),只需要把freq改成'D'即可,逻辑完全一致~
内容的提问来源于stack exchange,提问作者user9505772
相关产品推荐
相关产品推荐

