如何将无表头CSV的全部数据(含首行)写入现有Excel文件?
解决无表头CSV首行数据写入Excel时被遗漏的问题
问题根源
你的脚本读取无表头CSV时,Pandas默认会把首行数据识别为列名,导致实际有效数据从第二行开始加载,最终写入Excel时丢失了原本的首行数据——这才是问题核心,并非to_excel的参数设置错误。
修改后的完整脚本
import pandas as pd import os csv_file_path = r'C:\Users\someUser\Downloads\file1.csv' excel_file_path = r'S:\noWhere\noWhereAgain\file2.xlsx' # 关键:读取无表头CSV时指定header=None,避免首行被当作列名 csv_data = pd.read_csv(csv_file_path, header=None) if os.path.exists(excel_file_path): excel_data = pd.read_excel(excel_file_path) last_row_index = excel_data.last_valid_index() # 计算起始行:紧接在Excel最后一行下方写入,避免空行 start_row = last_row_index + 1 if last_row_index is not None else 0 with pd.ExcelWriter(excel_file_path, mode='a', engine='openpyxl', if_sheet_exists='overlay') as writer: # header=False:不写入Pandas自动生成的列名(0、1、2...) csv_data.to_excel(writer, sheet_name='Sheet1', startrow=start_row, index=False, header=False) else: # 首次创建Excel时,若不需要表头则用header=False;需要自定义表头可参考下方示例 csv_data.to_excel(excel_file_path, index=False, header=False)
关键修改说明
- 读取CSV时添加
header=None:明确告知Pandas该文件无表头,首行即为有效数据,确保所有行都被正确加载。 - 调整
start_row计算逻辑:原脚本last_row_index + 2会导致新数据与原有数据之间空一行,改为+1实现连续写入。 - 保持
to_excel的header=False:避免将Pandas自动生成的数字列名写入Excel,符合无表头CSV的需求。
可选:首次创建Excel时添加自定义表头
如果需要给新生成的Excel添加自定义表头,可修改else分支:
else: # 根据实际需求定义表头列名 custom_headers = ['订单ID', '客户名称', '交易金额'] csv_data.columns = custom_headers csv_data.to_excel(excel_file_path, index=False, header=True)
内容的提问来源于stack exchange,提问作者Gerardo Roman
相关产品推荐
相关产品推荐

