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

Python如何将自定义统计函数每次输出的DataFrame存入同Excel不同工作表

问题修复方案

核心问题定位

  • 你编写的stats函数没有设置返回值,调用后赋值给Water_intake、food_intake的变量实际为None,无法拿到统计结果df2
  • 你未将多轮计算得到的统计结果统一存入可遍历容器,导出代码的循环逻辑和工作表命名逻辑错误,导致遍历过程中取到字符串类型值调用to_excel触发报错

分步修改代码

第一步:修改stats函数,添加返回逻辑

def stats(F1_para1,F2_para2,para3,para4,value):
    #MEAN,SEM,COUNT
    msc = df.groupby([F1_para1,F2_para2,para3,para4])[value].agg(['mean','sem','count'])
    msc.reset_index(inplace=True) #converts any columns in index as columns
    pd.DataFrame(msc)
    #TWO-WAY ANOVE AND MULTICOMP
    df['comb'] = df[F1_para1].map(str) + "+" + df[F2_para2].map(str)
    mod = ols(value+'~'+F1_para1+'+'+F2_para2+'+'+F1_para1+'*'+F2_para2, data = df).fit()
    aov = anova_lm(mod, type=2) #mod needs to be the same text as mod (i.e. mod1,mod2)
    comparison=MultiComparison(df[value], df['comb'])
    tukey_df = pd.read_html(comparison.tukeyhsd().summary().as_html())[0]
    r=tukey_df[tukey_df['reject'] == True]
    # 高版本pandas已弃用append,建议替换为concat:df2 = pd.concat([aov, r], ignore_index=True)
    df2=aov.append(r) #combines dataframes of aov and r
    # 新增返回语句
    return df2

第二步:将多轮统计结果存入字典(键为工作表名,值为对应统计结果)

# 初始化存储结果的字典
result_dict = {}
# 调用函数时将结果存入字典,键直接用因变量名作为后续工作表名
result_dict['Water_intake'] = stats('Time','Drug','Diet','Pre_conditions',value='Water_intake') 
result_dict['Food_intake'] = stats('Time','Drugs','Diet','Pre_conditions',value='Food_intake')

第三步:修改导出代码,批量写入多工作表Excel

import pandas as pd
with pd.ExcelWriter(r"path\statistics.xlsx") as writer:
    # 遍历字典,键作为工作表名,值作为对应写入的DataFrame
    for sheet_name, stats_df in result_dict.items():
        stats_df.to_excel(writer, sheet_name=sheet_name, index=False)
# with上下文会自动保存关闭,不需要手动调用save()

补充注意事项

  • Excel工作表名不能超过31个字符,也不能包含\ / ? * [ ]等特殊字符,命名时需注意
  • 若使用pandas 2.0及以上版本,需将原函数中aov.append(r)替换为pd.concat([aov, r], ignore_index=True)避免弃用报错

内容的提问来源于stack exchange,提问作者user17304179

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 08:06:03