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

如何用for循环优化重复的Pandas DataFrame处理代码?

问题解决:循环中更新Pandas DataFrame无效的问题

问题原因

你循环里的df = pd.merge(...)是重新赋值了一个新的DataFrame对象,但列表里存储的只是原空DataFrame的引用,修改后的新对象并没有替换列表里的旧引用,所以原变量first、second等不会被更新。

解决方案1:直接生成并存储处理后的DataFrame

不需要提前创建5个空DataFrame,直接在循环里生成每个处理好的DataFrame并存入列表,最后按需分配变量:

list_df = []
for i in range(1, 6):
    col_name = f"{i}PLetra"
    # 初始化单个DataFrame并赋值列
    df = pd.DataFrame()
    df[col_name] = letras
    df = pd.merge(df, posicao[[col_name, f"{i}P"]], on=col_name, how='left')
    df = df.fillna(0)
    # 将处理好的DataFrame加入列表
    list_df.append(df)

# 把列表中的元素分配给原变量
first, second, third, fourth, fifth = list_df

解决方案2:用字典管理更直观

如果想保留原变量名的语义,用字典存储会更清晰,方便后续按名称取用:

df_dict = {}
# 对应序号的变量名列表
names = ['first', 'second', 'third', 'fourth', 'fifth']

for i, name in enumerate(names, start=1):
    col_name = f"{i}PLetra"
    df = pd.DataFrame()
    df[col_name] = letras
    df = pd.merge(df, posicao[[col_name, f"{i}P"]], on=col_name, how='left')
    df = df.fillna(0)
    df_dict[name] = df

# 按名称取出使用
first = df_dict['first']
second = df_dict['second']
# ... 其他变量以此类推

原循环失效的核心原因

原代码中list_df = [first, second, third, fourth, fiveth]存储的是5个空DataFrame的引用,循环里df = pd.merge(...)让df指向了新创建的对象,但列表里的原引用并没有被替换,所以循环结束后first等变量还是最初的空DataFrame。

内容的提问来源于stack exchange,提问作者Lucas Leonardo Ciaramella Reis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 13:03:26