基于Pandas处理Excel时间序列:补全间隔超10分钟的缺失时间
修正时间序列处理逻辑与NaT值填充问题
我来帮你搞定这个时间序列的校验和修复工作,你的原代码有几个关键问题需要调整,同时还要处理NaT值的填充逻辑,下面是完整的修正方案:
原代码的核心问题
- 循环从
i=0开始,会导致i-1=-1的索引错误,应该从i=1开始遍历 - 直接比较分钟数的差值逻辑错误,跨小时/天的情况下会得到不准确的结果,应该计算完整的时间差
minute(10)是错误的调用方式,需要用datetime.timedelta(minutes=10)来表示时间增量- 没有处理NaT值的情况,原代码完全忽略了这部分数据的修复
修正后的完整代码
import pandas as pd import os import datetime # 注意路径使用原始字符串避免转义问题 os.chdir(r'C:\Users\NIK\.spyder2\PythonScripts') file = 'FilterDataTest.xlsx' # 使用sheet_name替代已废弃的sheetname参数 data = pd.read_excel(file, sheet_name='Ark1') # 复制一份Timestamp列,避免直接修改原数据(更安全) dato_cleaned = data['Timestamp'].copy() # 从索引1开始遍历,因为需要和前一个时间点对比 for i in range(1, len(dato_cleaned)): # 优先处理NaT值:替换为前一个时间+10分钟 if pd.isna(dato_cleaned[i]): dato_cleaned[i] = dato_cleaned[i-1] + datetime.timedelta(minutes=10) else: # 计算两个时间点的差值(转换为分钟数) time_diff_minutes = (dato_cleaned[i] - dato_cleaned[i-1]).total_seconds() / 60 # 如果差值超过10分钟,将当前时间修正为前一个时间+10分钟 if time_diff_minutes > 10: dato_cleaned[i] = dato_cleaned[i-1] + datetime.timedelta(minutes=10) # 将修复后的时间列添加回原DataFrame data['Timestamp_Cleaned'] = dato_cleaned # 查看处理结果 print(data[['Timestamp', 'Timestamp_Cleaned']])
关键修正点说明
- 路径处理:用原始字符串
r'路径'避免Windows路径中的转义字符问题 - 索引遍历:从
i=1开始,保证每次都能获取到前一个有效的时间点 - NaT值处理:用
pd.isna()准确识别NaT值,直接填充为前一个时间加10分钟 - 时间差计算:通过
total_seconds()/60计算准确的分钟差值,避免跨时段的逻辑错误 - 时间增量:使用
datetime.timedelta(minutes=10)正确生成10分钟的时间间隔,替代原代码中的错误调用
这样处理后,你的时间序列会同时满足两个需求:相邻时间差超过10分钟时自动修正,所有NaT值都会被合理填充。
内容的提问来源于stack exchange,提问作者Nicklas Koldkjær
相关产品推荐
相关产品推荐

