如何用Python的Pandas读取行列转置的Excel文件?
解决转置Excel文件的读取还原问题
问题根源
直接调用df.transpose()达不到预期效果,核心原因是转置后的Excel结构发生了本质变化:原文件的表头变成了新文件的第一列,原数据行变成了新文件的列,而Pandas默认会把第一行识别为表头,导致数据和表头错位。
正确处理步骤
1. 读取转置文件时保留原始结构
读取时不要让Pandas自动识别表头,把所有内容都当作纯数据读取:
import pandas as pd # header=None 表示不将第一行作为表头,完全保留原始结构 df_transposed = pd.read_excel("转置后的文件.xlsx", header=None)
2. 重构还原原文件结构
转置后的第一列是原文件的表头,从第二行开始的内容是原文件的数据行,按以下逻辑重构:
# 提取第一列的值作为新的表头 new_headers = df_transposed.iloc[:, 0].tolist() # 提取从第二行、第二列开始的区域作为原始数据 df_original = df_transposed.iloc[1:, 1:] # 为重构后的DataFrame设置表头 df_original.columns = new_headers # (可选)如果原文件有自定义索引,把转置文件第一行的内容设为索引 df_original.index = df_transposed.iloc[0, 1:].tolist()
3. 特殊格式处理(如果需要)
如果转置后的文件存在合并单元格、空值等特殊格式,需额外处理:
- 合并单元格:读取时添加
merge_cells=True参数,之后用ffill()填充合并后的空值 - 空值:根据业务需求用
df.fillna(0)或df.dropna()处理
性能优化建议
因为转置后文件体积大幅缩小,读取时可以指定数据类型,避免Pandas自动推断带来的内存浪费和速度损耗:
# 比如统一指定字符串类型,避免日期、数值类型的误推断 df_transposed = pd.read_excel("转置后的文件.xlsx", header=None, dtype=str)
内容的提问来源于stack exchange,提问作者Leober Ramos
相关产品推荐
相关产品推荐

