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

时间序列数据补全异常:循环插入的虚拟数据时间值全部相同

时间序列补全时重复引用导致time字段值一致的问题解决

你遇到的这个问题其实是Python里字典引用传递的坑!咱们来拆解一下:

问题根源

你在循环里用了fd.append(fd[length_dict-1]),这其实是把最后一条记录的字典引用加到列表里了,而不是创建一个新的字典副本。所以后面不管你修改哪一个新增元素的time字段,其实都是在修改同一个字典对象,最后所有新增记录自然都显示成最后一次修改的时间了。

修复方案

解决办法很简单:每次新增的时候,创建原字典的浅拷贝(如果字典里没有嵌套结构,浅拷贝就足够),这样每个新增的都是独立的字典对象。

修正后的代码

from datetime import datetime, timedelta

# 假设fd是已有的字典列表,示例数据
fd = [{'a': 636, 'b': 'D1016', 'c': 53.280004, 'd': 0.0, 'e': 28.765, 'time': '2017-12-10 14:54:07'} for _ in range(53)]

length_dict = len(fd)
if length_dict <= 60:
    row_to_insert = 60 - length_dict
    last_time = fd[length_dict-1]['time']
    # 先把最后一条记录转成datetime对象,避免每次循环重复解析
    base_date = datetime.strptime(last_time, '%Y-%m-%d %H:%M:%S')
    
    for row in range(row_to_insert):
        # 创建原字典的浅拷贝,而不是直接引用
        new_row = fd[length_dict-1].copy()
        fd.append(new_row)
        
        # 计算当前要新增的时间:base_date加上(row+1)分钟
        modified_date = base_date + timedelta(minutes=(row+1))
        modified_date_str = modified_date.strftime("%Y/%m/%d %H:%M:%S")
        
        # 修改当前新增的字典的time字段
        new_row['time'] = modified_date_str
        # 可以验证一下
        print(f"lngth of fd: {len(fd)} {modified_date_str}")

关键修改点

  • 用fd[length_dict-1].copy()替代直接append原字典,创建独立的新字典
  • 把datetime.strptime提到循环外面,避免重复解析字符串,提升效率
  • 直接修改刚创建的new_row字典,逻辑更清晰

这样修改后,你新增的每条记录的time字段就会是依次递增的分钟数,不会全部变成最后一个值了。

内容的提问来源于stack exchange,提问作者Naitik Shukla

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:06:54