Pandas导入Excel列数据顺序错误问题求助
排查与解决方案
核心问题推测
你遇到的每第4个工作表列顺序错乱的问题,大概率是复用同一个Excel读取对象导致的状态残留,或是Pandas对列范围M:AD的解析在不同工作表中因格式/隐藏列等因素出现偏差。
具体排查与修复步骤
1. 避免复用ExcelFile对象
如果你的xls是提前创建的pd.ExcelFile实例,循环读取时可能会残留之前的解析状态。改成每次读取时重新打开文件:
df1 = [] for s in main: # 若xls是文件路径,直接传入路径即可;若已是ExcelFile,改用文件路径重新打开 with pd.ExcelFile(xls) as xls_file: df = pd.read_excel(xls_file, sheet_name=s, skiprows=4, nrows=32, usecols='M:AD') df1.append(df)
2. 用明确列名替代列范围
usecols='M:AD'的解析依赖Excel的列结构,若个别工作表有隐藏列、格式异常,会导致列顺序混乱。先从正常工作表提取目标列名,再统一用列名读取:
# 先从第一个正常工作表获取标准列名 with pd.ExcelFile(xls) as xls_file: sample_df = pd.read_excel(xls_file, sheet_name=main[0], skiprows=4, nrows=1, usecols='M:AD') target_cols = sample_df.columns.tolist() # 用标准列名读取所有工作表 df1 = [] for s in main: with pd.ExcelFile(xls) as xls_file: df = pd.read_excel(xls_file, sheet_name=s, skiprows=4, nrows=32, usecols=target_cols) df1.append(df)
3. 合并前强制统一列顺序
即使个别工作表读取后列顺序错乱,合并前统一调整为标准顺序:
df1 = [pd.read_excel(xls, sheet_name=s, skiprows=4, nrows=32, usecols='M:AD') for s in main] # 以第一个工作表的列顺序为标准 standard_cols = df1[0].columns.tolist() # 调整所有DataFrame的列顺序 df1 = [df.reindex(columns=standard_cols) for df in df1] dfconcat = pd.concat(df1, ignore_index=True, sort=False) dfconcat.dropna(axis=0, how='all', inplace=True)
4. 检查Excel文件本身
- 确认异常工作表的
M:AD范围内无隐藏列,隐藏列会干扰Pandas的列范围解析 - 检查所有工作表的对应列是否有格式差异(比如文本/数值类型不一致)
- 再次核实无合并单元格(包括隐形合并,可通过Excel的「开始→查找和选择→定位条件→合并单元格」检查)
内容的提问来源于stack exchange,提问作者Rand0mdude
相关产品推荐
相关产品推荐

