如何基于目标datetime数组修正带datetimeindex的Pandas DataFrame
解决方案
直接使用Pandas内置的reindex方法即可实现需求,全程无显性for循环,底层是向量化操作,处理效率远高于自定义循环实现。
具体实现步骤
- 生成标准5分钟间隔索引(可选优化)
无需手动写时间生成函数,直接用pd.date_range生成符合要求的标准索引即可:
import pandas as pd # 取原数据的起止时间,生成5分钟间隔的标准索引,freq='5T'代表5分钟间隔 correct_index = pd.date_range(start=df.index.min(), end=df.index.max(), freq='5T')
如果你已经手动生成了目标时间数组date_arr,直接转成DatetimeIndex类型即可:
correct_index = pd.to_datetime(date_arr)
- 调用reindex方法得到结果
df2 = df.reindex(correct_index)
方法逻辑说明
reindex完全匹配你的需求:
- 自动删除原DataFrame中索引不在
correct_index里的行(对应示例中11:12、11:27的非法行) - 自动为
correct_index中存在、原DataFrame缺失的索引新增行,默认填充NaN(对应示例中11:25的缺失行) - 原有合法索引的行数据会完整保留,不会做任何修改。
内容的提问来源于stack exchange,提问作者Nihilum
相关产品推荐
相关产品推荐

