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

Pandas内存高效迭代更新DataFrame的需求及问题解决

优化Pandas代码内存效率并实现指定迭代更新需求

原代码

import pandas as pd

# Sample DataFrame
data = {'A': [1, 2, 3],
       'B': [4, 5, 6],
        'ST_GR': [1, 2, 3],
         'SEC': [1, 2, 4]}
df = pd.DataFrame(data)

GROUP = ['SEC', 'ST_GR']
VALUES = [['Z', 'ZZ'], ['Z', 'ST_GR'], ['SEC', 'Z'], ['SEC', 'ST_GR']]

# Create a dictionary to store the updates
updates = {}

# Iterate through GROUP and VALUES
for group_item, sub_value in zip(GROUP, VALUES):
    if group_item in df.columns:
       for value in range(len(sub_value)):
           updates[group_item] = sub_value[value]
           print(updates)

# Update the DataFrame with the specified values
df.update(pd.DataFrame(updates, index=df.index))

print("Updated DataFrame:")
print(df)

需求说明

每次迭代需按以下规则更新原DataFrame:

  • 第1次迭代:设置df['SEC'] = 'Z',df['ST_GR'] = 'ZZ'
  • 第2次迭代:设置df['SEC'] = 'Z',df['ST_GR']保留原始值
  • 第3次迭代:df['SEC']保留原始值,设置df['ST_GR'] = 'Z'
  • 第4次迭代:df['SEC']与df['ST_GR']均保留原始值

每次迭代预期输出

第1次迭代

A  B ST_GR SEC
0  1  4     Z  ZZ
1  2  5     Z  ZZ
2  3  6     Z  ZZ

第2次迭代

A  B ST_GR SEC
0  1  4     1    Z
1  2  5     2    Z
2  3  6     3    Z

第3次迭代

A  B ST_GR SEC
0  1  4     Z    1
1  2  5     Z    2
2  3  6     Z    4

第4次迭代

A  B ST_GR SEC
0  1  4     1    1
1  2  5     2    2
2  3  6     3    4

优化后的解决方案

核心思路:提前备份原始列数据,每次迭代先恢复原始状态,再直接在原DataFrame上执行指定更新,全程仅使用单个DataFrame和必要备份变量,最大化内存效率。

import pandas as pd

# 初始化原始DataFrame
data = {'A': [1, 2, 3],
        'B': [4, 5, 6],
        'ST_GR': [1, 2, 3],
        'SEC': [1, 2, 4]}
df = pd.DataFrame(data)

# 备份原始列数据,用于每次迭代前恢复初始状态
original_sec = df['SEC'].copy()
original_st_gr = df['ST_GR'].copy()

# 定义每次迭代的更新规则
update_rules = [
    {'SEC': 'Z', 'ST_GR': 'ZZ'},    # 第1次迭代
    {'SEC': 'Z'},                   # 第2次迭代
    {'ST_GR': 'Z'},                 # 第3次迭代
    {}                              # 第4次迭代:无更新
]

# 执行迭代更新
for idx, rule in enumerate(update_rules, 1):
    # 恢复原始值
    df['SEC'] = original_sec
    df['ST_GR'] = original_st_gr
    # 应用当前迭代的更新规则
    df.update(pd.DataFrame(rule, index=df.index))
    # 打印结果
    print(f"第{idx}次迭代:")
    print(df)
    print("-" * 20)

代码说明

  • 提前备份原始列,避免迭代过程中原始数据被覆盖,确保每次更新都从初始状态开始
  • 直接操作原DataFrame,无多余中间对象生成,内存占用极低
  • 用update()方法批量更新指定列,逻辑清晰且高效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 11:03:14