如何在scipy中传入列表作为多变量执行Friedman检验?
解决scipy.stats.friedmanchisquare的样本传入问题
你遇到的问题核心是**friedmanchisquare要求每个样本作为独立的位置参数传入**,而不是把所有样本打包成一个列表/数据框作为单个参数传递。函数报错是因为它只接收到1个参数(你的列表或数据框),而非30个独立样本。
以下是几种正确的实现方式:
方法1:解包你已生成的samples列表
在调用函数时用*操作符把列表中的每个元素拆成独立参数:
import scipy.stats as stats lst_cols = ['col1', 'col2', 'col3',..., 'col30'] samples = [] for i in lst_cols: lst = df[i].tolist() samples.append(lst) # 关键:用*解包samples,每个元素作为独立样本传入 stats.friedmanchisquare(*samples)
方法2:直接从DataFrame解包列数据(更简洁)
无需提前生成列表,直接把DataFrame的每一列作为独立参数传递:
import scipy.stats as stats # 解包所有列的数值序列 stats.friedmanchisquare(*[df[col] for col in df.columns])
方法3:利用数组转置快速解包
通过DataFrame的数值数组转置,直接获取每一列的样本并解包:
import scipy.stats as stats # df.values是(n行, 30列)的二维数组,转置后为(30列, n行),*操作符拆分每一行(原列)作为参数 stats.friedmanchisquare(*df.values.T)
内容的提问来源于stack exchange,提问作者racctor
相关产品推荐
相关产品推荐

