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

如何设置scipy f_oneway的p值打印精度并抑制科学计数法

问题描述

我刚接触Python统计分析,在Jupyter Notebook里做了多组单因素方差分析(f_oneway):

Result1 = f_oneway(Pre1, Post1)
Result2 = f_oneway(Pre2, Post2)
Result3 = f_oneway(Pre3, Post3)
Result4 = f_oneway(Pre4, Post4)
Result5 = f_oneway(Pre5, Post5)
Result6 = f_oneway(Pre6, Post6)

打印p值得到以下结果:

0.010560577848593931
2.475000911458267e-06
0.05427475343595909
6.361645717956705e-06
0.03233992342571283
0.06797375874790515

我的需求:

  • p值判断阈值为<0.05
  • 保留5位小数,且不使用科学计数法
  • 试过np.set_printoptions(precision=5, suppress=True)但无效,不想硬编码结果,要通用解决方法
解决方案

方法1:批量遍历结果,格式化输出

先把所有分析结果存入列表,循环处理每个结果的p值,用字符串格式化控制显示格式:

from scipy.stats import f_oneway

# 将所有结果存入列表,避免单个变量冗余
results = [
    f_oneway(Pre1, Post1),
    f_oneway(Pre2, Post2),
    f_oneway(Pre3, Post3),
    f_oneway(Pre4, Post4),
    f_oneway(Pre5, Post5),
    f_oneway(Pre6, Post6)
]

# 遍历格式化p值,同时标注显著性
for idx, res in enumerate(results, 1):
    p_val = res.pvalue
    # 强制保留5位小数,自动抑制科学计数法
    formatted_p = "{0:.5f}".format(p_val)
    significance = "显著(p<0.05)" if p_val < 0.05 else "不显著"
    print(f"第{idx}组分析:p值={formatted_p},{significance}")

输出示例:

第1组分析:p值=0.01056,显著(p<0.05)
第2组分析:p值=0.00000,显著(p<0.05)
第3组分析:p值=0.05427,不显著
第4组分析:p值=0.00001,显著(p<0.05)
第5组分析:p值=0.03234,显著(p<0.05)
第6组分析:p值=0.06797,不显著

方法2:自定义格式化函数(复用性强)

如果需要多次使用p值格式化逻辑,可以写个小函数封装:

def format_pvalue(p_val, decimals=5):
    # 固定小数位数,自动转为非科学计数法格式
    return "{0:.{1}f}".format(p_val, decimals)

# 使用示例
for idx, res in enumerate(results, 1):
    print(f"第{idx}组 p值:{format_pvalue(res.pvalue)}")

方法3:用Pandas整理成表格(更直观)

如果需要更清晰的结构化展示,把结果存入DataFrame,Jupyter会自动渲染成美观的表格:

import pandas as pd

data = {
    "组别": [f"第{i}组" for i in range(1,7)],
    "p值": [res.pvalue for res in results],
    "显著性": ["显著" if res.pvalue <0.05 else "不显著" for res in results]
}

df = pd.DataFrame(data)
# 格式化p值列
df["p值"] = df["p值"].apply(lambda x: "{0:.5f}".format(x))
df

补充:为什么np.set_printoptions无效?

f_oneway返回的是F_onewayResult对象,它的pvalue是单个Python浮点数,而非NumPy数组,所以NumPy的打印设置对单个浮点数不起作用,需要直接对浮点数做字符串格式化处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 11:30:20