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

Pandas循环新增列时整列被最后迭代值覆盖该如何解决

问题解决方法

根因说明

你在每次追加数据后对全表nome列统一赋值,会覆盖之前所有行的nome字段值,最终全列会被最后一次迭代的IMAB覆盖。

解决方案

方案1:修改循环逻辑,单份数据先加标识再合并

将名称赋值操作放在单份查询结果上,再合并到总表,避免修改历史数据:

import pandas as pd

def consulta_bc(codigo_bcb, nome):
    url = 'http://api.bcb.gov.br/dados/serie/bcdata.sgs.{}/dados?formato=json'.format(codigo_bcb)
    df = pd.read_json(url)
    df['data'] = pd.to_datetime(df['data'], dayfirst=True)
    df.set_index('data', inplace=True)
    df['nome'] = nome
    return df

lCodigos = [12, 11, 1, 21619, 21623, 12466]
lNames =   ['CDI', 'SELIC', 'USD', 'EUR', 'GPB', 'IMAB']

saida = pd.DataFrame()
for codigo, nome in zip(lCodigos, lNames):
    df_temp = consulta_bc(codigo, nome)
    saida = pd.concat([saida, df_temp])

saida.to_csv('Indice', sep=';', index=True)

方案2:批量处理后一次性合并(性能更优)

避免循环拼接DataFrame的性能损耗,用列表推导式生成所有单指标数据后一次性合并:

# 沿用上面的consulta_bc函数定义
dfs = [consulta_bc(codigo, nome) for codigo, nome in zip(lCodigos, lNames)]
saida = pd.concat(dfs, ignore_index=False)
saida.to_csv('Indice', sep=';', index=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 08:45:05