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

如何逐行向CSV追加Pandas DataFrame行而非列?

解决Pandas逐行写入CSV的行/列、覆盖及表头问题

我来帮你搞定这个问题!你遇到的几个麻烦——数据写成列、每次覆盖之前内容、表头残留,其实都是逐行处理DataFrame时的几个小细节没处理好,咱们一步步调整代码:

问题根源拆解

  1. 覆盖文件而非追加:你用了'w+'模式打开文件,每次循环都会清空文件重新写,最后只留下最后一行数据。得换成追加模式'a'。
  2. 一维列表转成了列数据:pd.DataFrame(case_row)会把单个列表当成列来处理(因为一维数组默认是列方向),要把它改成二维列表[case_row],这样生成的就是一行两列的DataFrame。
  3. 索引列被写入:默认to_csv会把DataFrame的索引写进去,你看到的输出里的0、1就是索引,得加index=False关掉它。
  4. 表头重复写入:虽然设了header=False,但循环里每次写入其实都不需要表头,保持这个设置就行。

修改后的完整代码

import pandas as pd
import os

case_array = [['2017042724', '05/18/2017'], ['2017042723', '05/18/2017'], ['2017042722', '05/18/2017'], ['2017042721', '05/18/2017']]
filename = 'case_array.csv'
path = r"C:\shares\folder"  # 加r避免转义字符问题
fullpath = os.path.join(path, filename)

# 先判断文件是否存在,避免第一次追加时文件不存在的异常
if not os.path.exists(fullpath):
    open(fullpath, 'w').close()

for case_row in case_array:
    # 把单个行转成二维列表,生成一行的DataFrame
    df = pd.DataFrame([case_row])
    try:
        # 用追加模式'a',header=False不写表头,index=False不写索引
        with open(fullpath, 'a') as f:
            df.to_csv(f, header=False, index=False)
        print(f'成功写入行: {case_row}')
    except Exception as e:
        print(f'写入失败: {str(e)}')

# 读取验证
try:
    df = pd.read_csv(fullpath, header=None)
    print("\n读取到的CSV内容:")
    print(df)
except Exception as e:
    print(f'读取失败: {str(e)}')

运行后的正确输出

读取到的内容会是:

0           1
0  2017042724  05/18/2017
1  2017042723  05/18/2017
2  2017042722  05/18/2017
3  2017042721  05/18/2017

(如果你不想要读取时自动生成的索引列,可以在read_csv里加index_col=False,或者读取后再处理)

另外注意路径里的\,最好加个r变成原始字符串,避免转义字符引发的错误,比如r"C:\shares\folder"。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:33:25