Python调用自定义函数报错AttributeError: 'function'无'to_excel'属性求助
错误根源
你遇到的属性报错由两个问题共同导致:
add函数返回值错误:当前你在add函数末尾写的是return add,相当于把add函数对象本身作为返回值,而非前面处理好的DataFrame对象df- 调用导出函数时传参错误:
out1(add)、out2(add)是直接把add函数作为参数传入,没有执行add()拿到处理结果,函数对象自然不存在to_excel方法,因此触发属性报错。
另外你原有代码里还隐含一个索引越界报错:你读取的usecols只有A、B、C三列,列索引最大为2,写df.insert(4, "D", "0")插入到第4位超出了列索引范围,会直接报错。
修正后可运行代码
import pandas as pd import numpy as np inputFile = "File.xlsx" def add(): cols = ["A", "B","C"] df = pd.read_excel(inputFile, usecols=cols) # 修正插入列的索引,3表示在现有三列之后插入新列 df.insert(3, "D", "0") df.dropna(subset = ["B"], inplace=True) df = df.replace(np.nan, '--', regex=True) df.columns = df.columns.str.replace('_',' ') # 修正返回值为处理好的DataFrame return df def out1(df): writer = pd.ExcelWriter("output1.xlsx", engine="xlsxwriter") df.to_excel(writer, sheet_name="Sheet1", index=False) ws = writer.sheets["Sheet1"] # 修正筛选范围,避免把末尾空行加入筛选 ws.autofilter(0, 0, df.shape[0]-1, df.shape[1]-1) writer.save() def out2(df): writer = pd.ExcelWriter("output2.xlsx", engine="xlsxwriter") df.to_excel(writer, sheet_name="Sheet1", index=False) ws = writer.sheets["Sheet1"] ws.autofilter(0, 0, df.shape[0]-1, df.shape[1]-1) writer.save() # 先执行add()拿到处理后的DataFrame再传入导出函数 processed_df = add() out1(processed_df) out2(processed_df)
冗余代码优化建议
当前out1和out2逻辑完全一致,仅输出文件名不同,可以合并为通用导出函数减少重复代码:
def export_excel(df, output_path): writer = pd.ExcelWriter(output_path, engine="xlsxwriter") df.to_excel(writer, sheet_name="Sheet1", index=False) ws = writer.sheets["Sheet1"] ws.autofilter(0, 0, df.shape[0]-1, df.shape[1]-1) writer.save() # 调用时只需传入不同的输出路径即可 processed_df = add() export_excel(processed_df, "output1.xlsx") export_excel(processed_df, "output2.xlsx")
内容的提问来源于stack exchange,提问作者Rogers
相关产品推荐
相关产品推荐

