如何批量处理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
相关产品推荐
相关产品推荐

