使用Pandas合并Excel文件并添加自定义列时出现AttributeError错误
解决Excel合并为CSV时的AttributeError问题
首先,咱们来拆解你遇到的错误根源:AttributeError: 'NoneType' object has no attribute 'to_csv'
这个错误的核心原因很简单:pandas的insert()方法是原地修改DataFrame,它不会返回新的DataFrame对象,而是返回None。你把这个None重新赋值给了combined,后面再调用combined.to_csv()自然就会报错啦。
另外,你的代码里还漏掉了关键的import pandas as pd语句,这也是新手常犯的小疏漏,必须补上才能正常运行。
下面是修正后的完整代码,我还加了一些细节优化:
import glob import pandas as pd # 补上pandas的导入语句 path = input("Enter the location of files ") GLB_DM_VER = input("Enter global DM version") # 用正斜杠避免路径转义问题,或者用双反斜杠 file_list = glob.glob(path + "/*.xls") # 更安全的路径写法(跨系统兼容): # import os # file_list = glob.glob(os.path.join(path, "*.xls")) excels = [pd.ExcelFile(name) for name in file_list] # 注意:sheet_names[2]是取第三张工作表(索引从0开始),如果你的Excel没有第三张表会报错,这里要确认清楚 frames = [x.parse(x.sheet_names[2], header=0, index_col=None) for x in excels] combined = pd.concat(frames) # 直接调用insert,不要赋值给combined! combined.insert(loc=1, column='Global_DM_Version', value=GLB_DM_VER) # 导出CSV文件 combined.to_csv( "STAND_2.csv", header=['TARGET_DOMAIN','SOURCE_DOMAIN','DOMAIN_LABEL','SOURCE_VARIABLE','RAVE_LABEL','TYPE','VARIABLE_LENGTH','CONTROL_TYPE','CODELIST_OID','TARGET_VARIABLE','MANDATORY','RAVE_ORIGIN'], index=False )
额外给你几个小提醒:
- 确认
x.sheet_names[2]对应的是你要读取的工作表,如果你想读取第一张表,应该用x.sheet_names[0] - 如果你的Excel文件是
.xlsx格式,记得把glob里的*.xls改成*.xlsx - 路径部分用
os.path.join可以避免Windows和Linux系统的路径分隔符差异问题
内容的提问来源于stack exchange,提问作者Akhil
相关产品推荐
相关产品推荐

