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
相关产品推荐
相关产品推荐

