使用pandas将CSV转为Excel并在顶部新增表头行的解决方案咨询
问题原因
你原来的写法会覆盖文件的核心原因是:两次独立操作同一个Excel文件,第二次调用xlsxwriter.Workbook()时默认是新建覆盖模式,直接把之前df.to_excel()生成的文件内容完全清空重写,自然会丢失原有数据。
可行方案
方案1:直接在pandas层面设置表头(最简便)
你原CSV没有表头,读取的时候首先要加header=None避免pandas把第一行数据误识别为表头,之后直接给df设置列名再导出即可,不需要额外操作xlsxwriter:
import pandas as pd # 读取无表头的CSV,header=None告诉pandas不要把首行当表头 df = pd.read_csv(r'Y:\DAILY.csv', sep=';', header=None) # 自定义设置你需要的列名,按列顺序替换成实际名称即可 df.columns = ['列名1', '列名2', '列名3', '...'] # 直接导出Excel,此时表头会自动生成在首行 df.to_excel(r"Y:\DAILYF.xlsx", index=False)
如果不需要保留pandas自动生成的序号索引,加index=False即可。
方案2:对接pandas的ExcelWriter操作xlsxwriter(适合需要自定义表头样式的场景)
如果你确实需要单独操作xlsxwriter设置表头格式、字体等属性,需要用同一个ExcelWriter对象关联pandas和xlsxwriter操作,避免覆盖:
import pandas as pd # 读取CSV df = pd.read_csv(r'Y:\DAILY.csv', sep=';', header=None) # 用xlsxwriter作为引擎创建ExcelWriter对象 with pd.ExcelWriter(r"Y:\DAILYF.xlsx", engine='xlsxwriter') as writer: # 先把df写入Excel,从第2行(索引1)开始 df.to_excel(writer, startrow=1, index=False, header=False) # 获取当前工作表对象 workbook = writer.book worksheet = writer.sheets['Sheet1'] # 自定义写入表头行(第1行,索引0),可以同时设置样式 # 示例:表头列表 header_list = ['列名1', '列名2', '列名3', '...'] # 可以按需设置表头样式 header_format = workbook.add_format({'bold': True, 'bg_color': '#f0f0f0'}) for col_num, value in enumerate(header_list): worksheet.write(0, col_num, value, header_format)
内容的提问来源于stack exchange,提问作者daniel
相关产品推荐
相关产品推荐

