从OneDrive文件夹导入多Excel文件合并DataFrame报错求助
解决Excel合并报错及列名处理问题
1. 核心错误:AttributeError 原因及修复
你初始化df = []为列表,但list.append()是原地修改列表,返回值为None。第一次循环执行df = df.append(data)后,df会变成None,第二次循环调用df.append()就触发了AttributeError。
2. 满足列名与列保留需求
你提到要用第6个索引(Python索引从0开始,对应第6行,参数为header=5)作为列名、保留80%列,这部分需要在读取Excel时配置参数。
3. 处理openpyxl警告
Data Validation的警告是因为Excel含数据验证规则(如下拉框),openpyxl不支持解析,不影响数据读取,可屏蔽该警告。
完整修复代码
import os import pandas as pd import numpy as np import warnings # 屏蔽openpyxl的无关警告 warnings.filterwarnings('ignore', category=UserWarning, module='openpyxl') path = os.getcwd() files = os.listdir(path) # 修正Excel文件筛选逻辑,兼容大小写后缀 files_xlsx = [f for f in files if f.lower().endswith('.xlsx')] # 用列表存储各文件的DataFrame dfs = [] for f in files_xlsx: # 读取Excel,指定第6行作为列名 data = pd.read_excel(f, sheet_name='MPS DEL DIA', header=5) # 保留80%的列,按比例截取前N列 cols_to_keep = data.columns[:int(len(data.columns)*0.8)] data = data[cols_to_keep] dfs.append(data) # 合并所有DataFrame df = pd.concat(dfs, ignore_index=True)
关键改动说明
- 改用列表
dfs存储每个文件的DataFrame,循环中直接dfs.append(data),最后用pd.concat合并,彻底避免None赋值问题; - 修正Excel筛选逻辑:
f.lower().endswith('.xlsx')比原判断更准确,兼容大写后缀; - 添加
header=5参数指定列名行; - 加入列保留逻辑,按80%比例截取列;
- 加入警告屏蔽代码,消除不必要的提示。
内容的提问来源于stack exchange,提问作者mjmoralesf
相关产品推荐
相关产品推荐

