You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:14:06