pandas中asfreq()未指定method时丢失数据的原因咨询
问题原因
asfreq('T')的核心逻辑是生成严格对齐指定频率(分钟级)的时间索引,然后仅保留原数据中索引恰好落在这些整点分钟上的行。但你的原始数据时间戳都带秒数(比如2020-03-02 19:13:22),和asfreq('T')生成的整点分钟(如2020-03-02 19:13:00)完全不匹配,所以原数据的所有行都无法匹配到新索引,最终全部显示为NaN,看起来就像“原数据消失”了。
解决方法
要保留原数据的有效数值、同时在分钟级间隔填充NaN,推荐用以下步骤:
- 转换时间格式并设置为索引:
Sal['DateTime'] = pd.to_datetime(Sal['DateTime']) Sal = Sal.set_index('DateTime')
- 生成覆盖原数据时间范围的分钟级时间序列:
min_range = pd.date_range(start=Sal.index.min(), end=Sal.index.max(), freq='T')
- 重新索引对齐,保留原数据值,空值自动填充NaN:
Sal = Sal.reindex(min_range)
这样处理后,原数据中19:13:22对应的28会保留在原时间戳的行里,前后的分钟间隔则填充NaN,完全满足后续插值的需求。
如果需要将原数据的时间戳对齐到最近的分钟(比如舍弃秒数,合并到19:13:00),可以先对索引做取整处理,再使用asfreq:
Sal['DateTime'] = pd.to_datetime(Sal['DateTime']) # 将时间戳向下取整到分钟 Sal['DateTime'] = Sal['DateTime'].dt.floor('T') Sal = Sal.set_index('DateTime').asfreq('T')
内容的提问来源于stack exchange,提问作者Alex Shakspeare
相关产品推荐
相关产品推荐

