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

Python调用自定义函数报错AttributeError: 'function'无'to_excel'属性求助

错误根源

你遇到的属性报错由两个问题共同导致:

  1. add函数返回值错误:当前你在add函数末尾写的是return add,相当于把add函数对象本身作为返回值,而非前面处理好的DataFrame对象df
  2. 调用导出函数时传参错误: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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 04:00:01