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
相关产品推荐
相关产品推荐

