Python批量处理Excel文件:删除指定列后导出至新路径时出现AttributeError求助
解决AttributeError: 'NoneType' object has no attribute 'to_excel'问题及代码优化
嘿,我来帮你排查这个错误!首先看你遇到的AttributeError,根源出在drop方法的inplace=True参数上,另外你的代码还没实现“导出到另一个路径避免覆盖原文件”的需求,我一起帮你修正。
错误原因分析
当你写df = df.drop(labels = col_to_delete, axis=1, inplace = True)时:
inplace=True会让drop方法直接修改原DataFrame对象,而不是返回一个新的DataFrame- 这时候
df = ...的赋值操作会把None(因为drop返回None)赋值给df,后续调用df.to_excel自然会报错——毕竟None没有这个方法
第一步:修复drop方法的使用
你有两种修正方式,选一种就行:
- 去掉
inplace=True,让drop返回修改后的新DataFrame:
df = df.drop(labels=col_to_delete, axis=1)
- 保留
inplace=True,但不要重新赋值给df:
df.drop(labels=col_to_delete, axis=1, inplace=True)
第二步:实现导出到新路径避免覆盖原文件
你的原始代码里file.with_suffix('.xlsx')还是指向原文件路径,会覆盖源文件。我们可以创建一个目标文件夹,把处理后的文件导出到那里:
- 先定义目标文件夹路径
- 用
mkdir(exist_ok=True)确保文件夹存在(不存在就创建,存在则不报错) - 拼接目标文件路径,导出时使用这个路径
完整修正后的代码
import pandas as pd from pathlib import Path # 源文件夹路径 source_folder = Path(r"C:\Users\Mand\Documents") # 目标文件夹路径(可根据需求自定义) target_folder = Path(r"C:\Users\Mand\Documents\processed_excels") # 需要删除的列 col_to_delete = ['Col1', 'Col2', 'Col3', 'Col4'] # 创建目标文件夹(不存在则自动创建) target_folder.mkdir(exist_ok=True) # 遍历源文件夹下的所有xlsx文件 for file in source_folder.glob('*.xlsx'): # 读取Excel文件 df = pd.read_excel(file) # 删除指定列(这里用第一种方式,不使用inplace) df = df.drop(labels=col_to_delete, axis=1, errors='ignore') # 拼接目标文件路径 target_file = target_folder / file.name # 导出到目标路径,不保留索引 df.to_excel(target_file, index=False)
额外提示
- 我在代码里补上了
import pandas as pd——你的原始代码里没写这行,运行时会触发导入错误 - 加上
errors='ignore'参数后,如果某些Excel文件里没有col_to_delete中的列,程序也不会报错,会跳过不存在的列继续执行
内容的提问来源于stack exchange,提问作者ChKYu
相关产品推荐
相关产品推荐

