解决DataFrame循环赋值覆盖问题:生成全量数据的DataFrame
解决循环中DataFrame被覆盖的问题
你的代码问题出在每次循环都重新创建df1,导致之前迭代生成的数据被覆盖,最终只保留最后一条记录。下面是两种可行的修改方案:
方案一:先收集所有数据再生成DataFrame(推荐,效率更高)
先创建一个空列表,把循环中获取的所有数据存入列表,最后一次性生成完整的DataFrame:
import requests import pandas as pd # 调用接口获取数据 r = requests.get('https://api.gateio.la/api2/1/feelist') lista = r.json() # 创建空列表存储所有数据 data_list = [] for key, ad in lista.items(): sy = ad['symbol'] no = ad['no'] # 将序号和交易对存入列表 data_list.append({'序号': no, '交易对': sy}) # 生成完整的DataFrame,并设置序号为索引 df = pd.DataFrame(data_list).set_index('序号') # 导出到Excel df.to_excel('交易对列表.xlsx') print(df)
方案二:循环中逐步追加数据
如果数据量不大,也可以在循环中通过pd.concat逐步拼接DataFrame:
import requests import pandas as pd r = requests.get('https://api.gateio.la/api2/1/feelist') lista = r.json() # 初始化空的DataFrame df = pd.DataFrame() for key, ad in lista.items(): sy = ad['symbol'] no = ad['no'] # 生成临时DataFrame并拼接到主DataFrame temp_df = pd.DataFrame([sy], index=[no], columns=['交易对']) df = pd.concat([df, temp_df]) # 导出到Excel df.to_excel('交易对列表.xlsx') print(df)
说明
- 方案一通过列表收集数据再生成DataFrame,避免了循环中频繁拼接DataFrame的性能损耗,适合数据量较大的场景。
- 两种方案最终都能生成包含所有数据的DataFrame,并且支持直接导出到Excel文件。
内容的提问来源于stack exchange,提问作者smet for
相关产品推荐
相关产品推荐

