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

Python合并同表头.xls文件报错:'NoneType' object is not iterable

解决"NoneType' object is not iterable"错误并实现Excel文件合并需求

嘿,我来帮你搞定这个问题!先拆解下你遇到的错误根源,再一步步修正代码,同时满足你忽略文件首行的需求。

错误原因分析

你代码里的核心问题出在df = df.append(pd.read_excel(arquivo))这一行:

  • 你一开始把df定义成了空列表[],而列表的append()方法是原地修改列表,返回值为None。
  • 第一次循环执行后,df就被赋值成了None,第二次循环再调用df.append()时,就会报错说NoneType对象没有append方法;后续的pd.concat(df)也会因为df是None,抛出"不可迭代"的错误。

另外,你的代码还没实现忽略文件首行的需求,这部分咱们也要补上。

修正后的完整代码

import os
import glob
import pandas as pd

# 切换到目标文件夹
os.chdir("file folder path")
# 获取所有.xls文件路径
file_list = glob.glob('*.xls')

# 初始化空列表,用来存储每个文件的DataFrame
dfs = []

for arquivo in file_list:
    # 读取Excel文件,skiprows=1表示忽略第一行(表头行之上的首行)
    # 若你的"首行"是指表头本身,需用第二行做表头,可改成header=1,根据实际文件结构调整
    df_single = pd.read_excel(arquivo, skiprows=1)
    # 将单个文件的DataFrame添加到列表中
    dfs.append(df_single)

# 合并所有DataFrame(先判断列表非空,避免空合并报错)
if dfs:
    company_df = pd.concat(dfs, ignore_index=True)
    # 去除列名的空格
    company_df.columns = company_df.columns.str.strip()
    # 可添加保存或后续处理代码,比如:
    # company_df.to_excel("merged_result.xlsx", index=False)
else:
    print("没有找到任何.xls文件,请检查文件路径是否正确!")

关键修改点说明

  • 变量名更清晰:把fileLista改成file_list,df改成dfs(表示多个DataFrame的列表),代码可读性更好。
  • 正确添加DataFrame到列表:用dfs.append(df_single)代替赋值操作,确保列表始终保持可迭代状态,不会变成None。
  • 实现忽略首行:添加skiprows=1参数,告诉pandas跳过文件第一行;若需要用第二行作为表头,可替换为header=1,根据实际情况调整。
  • 空列表判断:添加if dfs:的判断,避免当没有找到xls文件时,pd.concat抛出空输入的错误。
  • 重置索引:pd.concat时加上ignore_index=True,合并后的DataFrame会生成连续的新索引,避免原文件索引重复的问题。

额外小贴士

  • 确保file folder path是正确的绝对路径,或相对于脚本运行目录的相对路径;不确定的话,可以用print(os.getcwd())查看当前工作目录。
  • 如果部分xls文件表头格式不一致,合并前可先检查列名是否匹配,避免合并后出现多余列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:28:17