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

Python处理DataFrame列表时元素意外被遍历两次问题咨询

问题原因

  • 最核心的异常来自Pandas的视图机制:你生成window_data时大概率用了切片操作,而Pandas切片默认返回原数据的视图而非独立副本。你修改任意一个window的price值时,都会直接修改原始数据集的对应数值,后续遍历其他重叠窗口时,取到的price已经是上一轮修改后的归一化值,而非原始价格。相当于对同一个位置的价格做了多次(当前值 / 起始价) -1的计算,多次计算后数值自然会无限接近-1,你观察到的“遍历两次”本质是视图修改导致原始数据被污染的假象。
  • 次要问题:iterrows逐行遍历效率极低,且你没有对输入的DataFrame做副本保护,原始输入数据会被直接修改,影响其他逻辑调用。

修复代码

直接用向量化操作替代逐行遍历,同时生成独立副本避免修改原始数据:

from typing import List
from pandas import DataFrame

def normalize_windows(window_data: List[DataFrame]):
    # 仅读取一次原始起始价,不受后续操作影响
    starting_price = window_data[0]['price'].iloc[0]
    normalized_windows = []
    for window in window_data:
        # 生成独立副本,不修改原始输入数据
        processed_window = window.copy()
        # 向量化整列计算,效率远高于逐行遍历
        processed_window['price'] = (processed_window['price'] / starting_price) - 1
        normalized_windows.append(processed_window)
    return normalized_windows

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 14:45:02