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

使用Pandas处理数据时如何保留复杂Excel表头格式?

解决特殊格式Excel表头解析问题

核心问题分析

  1. 语法错误引发报错:你写的header=[1:3]是Python语法错误,Pandas的header参数需要传入行索引列表,而非切片表达式,这直接导致了ValueError。
  2. Unnamed列名问题:U列后的表头显示为unnamed,是因为Excel表头存在多行合并/空值,Pandas无法自动补全空表头的层级关联。

解决方案(无需手动修改Excel格式)

步骤1:修正表头读取参数

将错误的header=[1:3]改为对应表头行的索引列表(Pandas采用0-based索引)。假设你的表头实际占第2、3行(Excel界面显示的行号),则使用header=[1,2]。

步骤2:合并多级表头并补全空值

读取后通过处理多级表头,将空的上层表头用前一个非空值填充,再合并为单级列名,解决unnamed问题。

完整可运行代码

#!/usr/bin/env python 
import sys
import os
import pandas as pd

# 读取源文件路径
user_input = input("Enter the path of your source excel file (omit 'C:'): ")     

# 读取Excel,指定第2、3行为表头(0-based索引1和2)
df = pd.read_excel(user_input, sheet_name='PN Projection', header=[1,2])

# 处理多级表头:填充空的上层列名并合并为单级列名
cols_df = pd.DataFrame(df.columns.tolist())
# 向下填充第一列空值,用前一个非空值补全
cols_df[0] = cols_df[0].ffill()
# 合并两级表头,空的子表头直接保留父表头
df.columns = cols_df.apply(lambda row: f"{row[0]}_{row[1]}" if pd.notna(row[1]) else row[0], axis=1)

# 数据过滤逻辑
df = df[~(df['Item Status'] == 'EOL')]
df = df[~(df['Description'].str.contains("XCVR", na=False))]
df = df[(df['Description'].str.contains("XC", na=False) | df['Description'].str.contains("Spartan", na=False))]

print(df)

# 保存过滤后的数据(去掉默认索引)
df.to_excel('filtered_data.xlsx', sheet_name='filtered_data', index=False)

关键说明

  • 如果你的表头实际占行数不同(比如3行),只需调整header参数为对应的索引列表,例如header=[0,1,2],再修改表头合并逻辑即可。
  • 合并后的列名如果不符合预期,可以根据实际表头结构调整apply里的拼接规则,比如用空格代替下划线。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 17:40:27