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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 23:27:02