如何在带有循环的python中执行Mann-Whitney U测试?

时间:2018-09-21 20:36:21

标签: python pandas loops scipy statistics

我有一个循环,每次都给出新的值k1和k2,但是问题是在我的数据集中,在k1和k2中所有值都为零的情况。当程序遇到它们时,它只会引发错误并且无法完成循环,并且仍然存在大量计算。我该如何使这样的案件如不适用之类的东西被签署,然后继续进行下去?

python3 

import pandas

from scipy.stats import mannwhitneyu

print(mannwhitneyu(k1, k2))

我针对不同的观察结果进行了Mann-Whitney U检验,我希望周期不会因错误而停止,只是要注意,此处不可能做到这一点

错误示例(上面的第3行是正常的):

MannwhitneyuResult(statistic=3240.0, pvalue=0.16166098643677973)
MannwhitneyuResult(statistic=2958.5, pvalue=0.008850960706454409)
Traceback (most recent call last):
  File "ars1", line 95, in <module>
    print(mannwhitneyu(k1, k2))
  File "/storage/software/python-3.6.0/lib/python3.6/site-packages/scipy/stats/stats.py", line 4883, in mannwhitneyu
    raise ValueError('All numbers are identical in mannwhitneyu')
ValueError: All numbers are identical in mannwhitneyu

2 个答案:

答案 0 :(得分:0)

如果2个数组相等,则可以继续循环。例如,如果:

k1 = [0,0,0,0,0];
k2 = [0,0,0,0,0];

然后您可以检查是否为k1 == k2。如果为真,则对循环使用continue。像这样:

if ( k1 == k2 ) == True: continue

在致电mannwhitneyu(k1, k2)

之前

答案 1 :(得分:0)

  • 我在循环中进行了尝试,并将其保存在文件夹中的csv文件中

  • 在列表中转换您的系列,并检查其是否相等

      for y in df.columns:
          target = df[y]
          list_mann_white = []
    
    
          for x in df.columns:
              if list(target) == list(df[x]):
                  pass
              else:
                  list_mann_white.append([stats.mannwhitneyu(target,df[x])[1],x])
    
          list_mann_white.sort()
          mann_csv = pd.DataFrame(chi_list)
          mann_csv.to_csv('Mann/target_{}.csv'.format(y))