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

从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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 11:22:52