Python 将多个dict值读入scipy函数时出现类型错误
我有一个带有多个分类特征的数据框架,我正试图对其进行Kruskal-Wallis假设检验。现在,我首先将这些列的每个值收集到一个dict中,从而传递它们的Python 将多个dict值读入scipy函数时出现类型错误,python,pandas,scipy,Python,Pandas,Scipy,我有一个带有多个分类特征的数据框架,我正试图对其进行Kruskal-Wallis假设检验。现在,我首先将这些列的每个值收集到一个dict中,从而传递它们的y: #对每个分类变量运行h测试 α=0.05 对于X_分类中的c: 样本={} 对于集合中的s(数据[c].tolist()): 样本[s]=d_测试数据[“SalePrice”][d_测试数据[c]=s].copy() stat,p=scipy.stats.kruskal(*样本) 打印(f“{c}:t-stat:{stat},p:{p}”
y
:
#对每个分类变量运行h测试
α=0.05
对于X_分类中的c:
样本={}
对于集合中的s(数据[c].tolist()):
样本[s]=d_测试数据[“SalePrice”][d_测试数据[c]=s].copy()
stat,p=scipy.stats.kruskal(*样本)
打印(f“{c}:t-stat:{stat},p:{p}”)
如果p
但是我得到了以下错误:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-135-b25ef3aa14d5> in <module>
19 for s in set(d_test_data[c].tolist()):
20 samples[s] = d_test_data["SalePrice"][d_test_data[c] == s].copy()
---> 21 stat, p = scipy.stats.kruskal(*samples)
22 print(f"{c}: t-stat: {stat}, p: {p}", "\n")
23 if p < alpha:
c:\users\jpaul\appdata\local\programs\python\python37\lib\site-packages\scipy\stats\stats.py in kruskal(*args, **kwargs)
5838 if arg.size == 0:
5839 return KruskalResult(np.nan, np.nan)
-> 5840 n = np.asarray(list(map(len, args)))
5841
5842 if 'nan_policy' in kwargs.keys():
TypeError: len() of unsized object
---------------------------------------------------------------------------
TypeError回溯(最近一次调用上次)
在里面
19对于集合中的s(数据[c].tolist()):
20个样本[s]=d_测试数据[“SalePrice”][d_测试数据[c]=s]。副本()
--->21统计,p=scipy.stats.kruskal(*样本)
22打印(f“{c}:t-stat:{stat},p:{p},“\n”)
23如果p5840 n=np.asarray(列表(映射(len,args)))
5841
5842如果kwargs.keys()中的“nan_策略”:
TypeError:未调整大小的对象的len()
我该怎么做才能使函数接受我的输入?我尝试使用to_list()
将它们从pandas.Series
转换为列表,然后将它们存储在我的dict中。我仍然收到相同的错误 没有a很难确定,但当我看到的签名时,我建议不要通过
stat, p = scipy.stats.kruskal(*samples)
由于samples
是一个dict,*samples
将dict的键作为顺序参数传递。那可能不是你想要的。也许你想要:
stat, p = scipy.stats.kruskal(*samples.values())
以前没有看到过该错误,但从它的说法来看,这意味着它无法在args上应用/使用
len
函数。d_测试数据[“SalePrice”][d_测试数据[c]==s].copy()
看起来怎么样?@isquared KeepitReal打印(d_测试数据[“SalePrice”][d_测试数据[c]==s].copy()
打印出我预期的,一个包含所有d_测试数据[“SalePrice”]值的熊猫系列
用于索引的s
的值。@isquared KeepitReal实际上,这些序列中的一些看起来是空的(我猜s
的一些值在数据中没有观察到),我想这可能是问题所在