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

使用Pandas处理Excel时保留首3行表头/筛选信息的问题

解决Excel筛选后保留前3行表头/筛选信息的问题

问题分析

原代码的核心问题是使用pd.read_excel()默认参数读取文件时,会把Excel的第一行当作DataFrame的列名,导致前3行的表头信息和后续数据的列结构不匹配,拼接后导出的Excel格式混乱。

解决方案

正确的做法是先完整读取所有行(不指定表头),拆分出表头信息、数据列名和数据行,筛选后再按原结构拼接:

修改后的代码

import pandas as pd

# 读取整个Excel,不设置表头,所有行都作为数据行保留
self.original_data = pd.read_excel('original-data.xlsx', header=None)

# 拆分出前3行的表头/筛选信息
header_rows = self.original_data.iloc[:3]
# 数据列名行(第4行,索引为3)
data_columns = self.original_data.iloc[3:4]
# 原始数据行(从第5行开始,索引4及以后)
raw_data = self.original_data.iloc[4:]
# 给原始数据设置列名
raw_data.columns = self.original_data.iloc[3].tolist()

# 执行数据筛选
filtered_data = raw_data[raw_data[self.filter_column].isin(self.filtered_list)]

# 按原格式拼接:表头行 + 数据列名行 + 筛选后的数据
final_data = pd.concat([header_rows, data_columns, filtered_data], ignore_index=True)

# 导出Excel,不保留索引,也不自动添加列名(因为我们已经手动包含了列名行)
final_data.to_excel('filtered_data/new-data.xlsx', sheet_name='Yay', index=False, header=False)

关键说明

  • header=None:确保读取Excel时不将任何行当作DataFrame的列名,完整保留所有原始行。
  • 拆分后分别处理表头、列名和数据:避免结构冲突,保证拼接后的格式和原文件一致。
  • 导出时设置header=False:因为我们已经把数据列名行作为普通行包含在final_data里了,不需要pandas自动生成列名。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 16:35:11