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

Python写入CSV问题:writerow后DataFrame表头缺失求助

问题解决:CSV写入自定义行后DataFrame表头缺失

问题根源

你的代码存在两个关键问题:

  • 调用df.to_csv时默认以'w'模式打开文件,会覆盖之前通过csv.writer写入的内容;同时你通过glob查找最新文件的逻辑冗余,还可能引发文件操作冲突。
  • 文件操作上下文混乱,导致DataFrame表头写入时出现异常。

修复方案:复用文件对象追加写入

直接在已打开的文件上下文里追加写入DataFrame,避免重复打开文件引发的覆盖或格式问题:

import pandas as pd
import csv

df = pd.read_sql(query, cnxn)
info = ['Date From:','',fromdate,'','To',todate]
file_path = f'C:/my_csv/{reportname}.csv'

with open(file_path, 'w', newline='') as file:
    # 写入自定义信息行
    writer = csv.writer(file)
    writer.writerow(info)
    # 追加写入DataFrame,保留表头与索引
    df.to_csv(file, index=True, index_label="No", header=True, mode='a')

更稳妥的方案:合并内容后一次性写入

如果需要严格控制CSV格式对齐,可以把自定义行转为DataFrame,再与原数据拼接后统一写入:

import pandas as pd

df = pd.read_sql(query, cnxn)
# 自定义行补全空列,保证与原DataFrame列数一致
info_row = ['Date From:','',fromdate,'','To',todate] + ['']*(len(df.columns)-6)
info_df = pd.DataFrame([info_row])
# 拼接自定义行与原数据
final_df = pd.concat([info_df, df], ignore_index=True)
# 写入CSV,设置索引标签与表头
final_df.to_csv(f'C:/my_csv/{reportname}.csv', index=True, index_label="No", header=True)

关键注意点

  • 避免重复打开同一文件:直接复用已打开的文件对象,减少文件IO冲突。
  • 模式选择:mode='a'确保追加写入而非覆盖,header=True会正常输出DataFrame表头。
  • 列数对齐:第二种方案中需保证自定义行的列数与原DataFrame一致,防止CSV格式错乱。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 04:01:55