使用pandas合并多组表格数据存入单个CSV文件的问题咨询
问题解答
故障原因
你代码中每次调用df.to_csv()时默认使用覆盖写入模式,新的表格内容会直接覆盖掉之前已经写入文件的内容,因此最终csv文件里只会保留最后一次循环写入的表格数据。
解决方案
这里提供两种常用实现方式:
方案1:追加模式逐次写入
每次写入时使用追加模式mode='a',同时只有第一次写入时保留表头,避免表头重复出现。建议额外增加isin列标注数据归属,方便后续区分不同标的的记录。
import requests import pandas as pd isins = ['LU0526609390:EUR','IE00BHBX0Z19:EUR'] # 标记是否是第一次写入,用来控制表头输出 first_write = True for isin in isins: html = requests.get(f'https://markets.ft.com/data/funds/tearsheet/historical?s={isin}').content df_list = pd.read_html(html) for df in df_list: # 新增isin列标注数据所属标的 df['isin'] = isin # 追加写入,第一次写带表头,后续不带 df.to_csv('data.csv', mode='a', header=first_write, index=True, encoding='utf-8-sig') # 第一次写入完成后修改标记 if first_write: first_write = False
方案2:先合并所有数据再一次性写入
把所有抓取到的表格先存到一个列表里,最后合并成一个大的DataFrame再写入文件,该方式写入的文件格式更统一,不容易出现换行、编码类的异常。
import requests import pandas as pd isins = ['LU0526609390:EUR','IE00BHBX0Z19:EUR'] # 初始化空列表存储所有df all_dfs = [] for isin in isins: html = requests.get(f'https://markets.ft.com/data/funds/tearsheet/historical?s={isin}').content df_list = pd.read_html(html) for df in df_list: df['isin'] = isin all_dfs.append(df) # 合并所有df total_df = pd.concat(all_dfs, ignore_index=True) # 一次性写入csv total_df.to_csv('data.csv', index=True, encoding='utf-8-sig')
补充说明
- 代码中增加
encoding='utf-8-sig'参数是为了兼容Windows系统下打开csv时的中文乱码问题,如果不需要可以删除。 ignore_index=True参数会重置合并后DataFrame的行索引,避免不同表的行索引重复。
内容的提问来源于stack exchange,提问作者user17063618
相关产品推荐
相关产品推荐

