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

如何批量处理DataFrame连续列?简化Shapiro正态性检验代码

批量实现Shapiro正态性检验的方法

你可以通过以下两种方式简化代码,批量处理目标列的正态性检验:

方法1:指定目标列名列表

直接把需要检验的列名整理成列表,循环遍历处理,清晰易懂:

from scipy.stats import shapiro

# 定义需要检验的目标列名
target_cols = ["AIDS_Death_Rate", "AIDS_Death", "HIV_Incidence_Rate", "New_HIV_Cases"]

# 循环执行检验并输出结果
for col in target_cols:
    stat, p_val = shapiro(df3[col].dropna())
    print(f"正态性检验结果({col}):统计量={stat:.4f}, p值={p_val:.4f}")

方法2:通过位置切片选择连续列

如果目标列是连续排列的,用iloc按列位置切片(注意:df3[3:6]是对行切片,列切片必须用iloc[:, 起始索引:结束索引],遵循左闭右开规则):

from scipy.stats import shapiro

# 选择连续列(假设目标列的索引是3到6,共4列,因此切片为3:7)
target_subdf = df3.iloc[:, 3:7]

# 遍历子DataFrame的每一列
for col_name, col_data in target_subdf.items():
    stat, p_val = shapiro(col_data.dropna())
    print(f"正态性检验结果({col_name}):统计量={stat:.4f}, p值={p_val:.4f}")

你之前代码的问题说明

  • 拼写错误:shaphiro 应为 shapiro
  • 切片逻辑错误:df3[3:6] 是行切片,列切片必须用iloc[:, 索引范围]
  • 缺失值处理错误:直接对子DataFrame用dropna()会删除含缺失值的整行,而非单独对每列去除缺失值,不符合检验需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 00:46:13