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
相关产品推荐
相关产品推荐

