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

如何使用Python和Pandas将多列表按列写入CSV文件并实现迭代追加不覆盖,同时解决EmptyDataError报错

解决CSV列追加数据的EmptyDataError问题

错误原因分析

你遇到的pandas.errors.EmptyDataError完全是因为代码顺序搞反了:你先尝试把空的DataFrame写入CSV,之后才给DataFrame赋值。如果是第一次运行,目标文件根本不存在,pandas找不到任何可解析的列结构,直接抛出这个错误。

正确实现方案

我们需要先把每次迭代的新数据转换成DataFrame,再根据文件是否存在来决定是创建新文件(带表头)还是追加数据(不带表头)。完整代码如下:

import pandas as pd
import os

# ----------------------
# 第一步:准备本次迭代的新数据
# ----------------------
# 第一次迭代的初始数据
titles = ['title1', 'title2', 'title3']
emails = ['1@1', '1@2', '1@3']
links = ['http1', 'http2', 'http3']

# 后续迭代的新数据(替换上面的初始数据即可)
# titles = ['title4', 'title5', 'title6']
# emails = ['1@4', '1@5', '1@6']
# links = ['http4', 'http5', 'http6']

# ----------------------
# 第二步:转换为对应列的DataFrame
# ----------------------
temp_df = pd.DataFrame({
    'Titles': titles,
    'Emails': emails,
    'Links': links
})

# ----------------------
# 第三步:写入/追加到CSV文件
# ----------------------
file_path = 'content.csv'

if not os.path.exists(file_path):
    # 文件不存在,首次创建:写入表头+完整数据
    temp_df.to_csv(file_path, index=False)
else:
    # 文件已存在,追加数据:不写表头,避免重复
    temp_df.to_csv(file_path, mode='a', header=False, index=False)

关键细节说明

  • 列名一致性:每次创建temp_df时,必须保证列名(Titles、Emails、Links)和首次创建的完全一致,这样追加的数据才能准确对应到目标列;
  • 追加模式控制:mode='a'告诉pandas以追加方式打开文件,而不是默认的覆盖模式;
  • 表头避免重复:只有首次创建文件时写入表头,后续追加时设置header=False,防止表头在文件中重复出现。

运行效果

第一次运行后,content.csv内容:

Titles,Emails,Links
title1,1@1,http1
title2,1@2,http2
title3,1@3,http3

替换为后续迭代的数据再次运行,文件会追加为:

Titles,Emails,Links
title1,1@1,http1
title2,1@2,http2
title3,1@3,http3
title4,1@4,http4
title5,1@5,http5
title6,1@6,http6

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 18:27:27