Excel处理程序忽略各工作表首行数据,从第二行写入输出文件的问题
Excel处理程序丢失首行数据的修复方案
问题描述
当前Excel处理代码存在异常:处理输入文件时,会忽略每个工作表的第一行数据,仅从第二行开始写入最终输出文件。
问题根源
代码中使用input_excel.parse(sheet_name)读取工作表时,pandas默认将文件的第一行识别为DataFrame的列名(header=0是默认值),导致原文件的第一行数据被当作表头,没有进入后续的数据处理流程,最终丢失。
修复方案
修改读取工作表的逻辑,指定header=None参数,让pandas将所有行都视为数据行,不自动将第一行设为列名。如果原文件确实包含表头,可以在读取后手动设置列名,再进行后续处理。
修改后的完整代码
import pandas as pd def process_sheet(sheet_name, sheet_data): result_rows = [] # 遍历所有数据行(包括原文件的第一行) for prefix in sorted(set(row[1] // 10000 for row in sheet_data.itertuples(index=False)), key=str): rows_with_prefix = sheet_data[sheet_data.iloc[:, 1] // 10000 == int(prefix)] if not rows_with_prefix.empty: result_row = [None] * len(sheet_data.columns) result_row[1] = int(prefix) # 在第二列设置3位前缀值 result_rows.extend([result_row] + rows_with_prefix.values.tolist()) return pd.DataFrame(result_rows) def process_excel(input_filename, output_filename): input_excel = pd.ExcelFile(input_filename) writer = pd.ExcelWriter(output_filename, engine='xlsxwriter') for sheet_name in input_excel.sheet_names: # 修改点:添加header=None,禁止将第一行识别为列名 sheet_data = input_excel.parse(sheet_name, header=None) processed_data = process_sheet(sheet_name, sheet_data) # 写入文件时不输出表头(保持原有逻辑) processed_data.to_excel(writer, sheet_name, index=False, header=False) writer._save() if __name__ == "__main__": input_file = "output_data.xlsx" output_file = "final.xlsx" process_excel(input_file, output_file)
关键修改说明
input_excel.parse(sheet_name, header=None):通过header=None参数,告诉pandas读取所有行作为数据,不将第一行解析为列名,这样原文件的第一行数据会被包含在sheet_data中参与后续处理。- 如果你的输入文件原本有表头行,需要额外处理:先读取表头,再从第二行开始处理数据。示例如下:
后续处理时可以根据需求将表头写入输出文件。# 读取表头和数据 sheet_data_with_header = input_excel.parse(sheet_name) header = sheet_data_with_header.columns.tolist() # 提取所有数据行(包括原第一行数据) sheet_data = sheet_data_with_header.reset_index(drop=True)
内容的提问来源于stack exchange,提问作者Tech Boy
相关产品推荐
相关产品推荐

