为何遍历DataFrame列执行shapiro检验时出现AttributeError错误
问题原因及解决办法
核心问题:变量名冲突导致模块引用被覆盖
你代码里犯了典型的变量名重复错误:
- 先导入
scipy.stats模块并命名为stats - 循环里又用
stats作为接收shapiro检验结果的第一个变量(stats, p_value = stats.shapiro(data))
第一次循环执行时,stats这个名字会被替换成shapiro返回的浮点型统计量,第二次循环再调用stats.shapiro()时,本质是在调用一个浮点数的shapiro方法,自然会抛出AttributeError: 'float' object has no attribute 'shapiro'。
而单独执行stats, p_value = stats.shapiro(df["DG-L"])时,只执行一次,变量覆盖的问题还没影响到方法调用,所以不会报错。
解决办法
把接收检验结果的变量名改成和模块名不重复的名字,比如stat或者w_stat:
import numpy as np import scipy.stats as stats from numpy.random import randn import pandas as pd df = pd.read_csv('DJ_splicing_data_plus_spliceAI.csv') for column in df: print(column) data = df[column].values stat, p_value = stats.shapiro(data) # 将stats替换为stat
内容的提问来源于stack exchange,提问作者Manolo Dominguez Becerra
相关产品推荐
相关产品推荐

