首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将SciPy stats.contingency应用于DataFrame以求出数据的临界值和p值时出错

将SciPy stats.contingency应用于DataFrame以求出数据的临界值和p值时出错
EN

Stack Overflow用户
提问于 2020-06-26 19:13:43
回答 1查看 584关注 0票数 0

我试图检查DF下面的性别与目的地国家列之间的关系。

代码语言:javascript
复制
              id    gender  country_destination
   2    4ft3gnwmtx  FEMALE  US
   6    lsw9q7uk0j  FEMALE  US
   7    0d01nltbrs  FEMALE  US
   8    a1vcnhxeij  FEMALE  US
  10    yuuqmid2rp  FEMALE  US

为了应用stat.chi2_contingency和获取p值,我将这个表转换为pivot_table,如下所示:

代码语言:javascript
复制
       AU   CA  DE  ES  FR  GB  IT  NL  PT  US
gender                                      
FEMALE 207  455 358 853 1962 88 1091 254 78 22694
MALE   188  477 416 677 1335 682 699 278 69 19457

但是,当我执行stats.chi2_contingency(df_contingency)时,我会出现以下错误

代码语言:javascript
复制
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-161-fee39cdf166f> in <module>()
----> 1 stats.chi2_contingency(df_contingency)

/usr/local/lib/python3.6/dist-packages/scipy/stats/contingency.py in 
chi2_contingency(observed, correction, lambda_)
    243     observed = np.asarray(observed)
--> 244     if np.any(observed < 0):
    245         raise ValueError("All values in `observed` must be nonnegative.")
    246     if observed.size == 0:

TypeError: '<' not supported between instances of 'str' and 'int'

请帮我弄清楚我哪里出了问题?

EN

回答 1

Stack Overflow用户

发布于 2020-06-26 22:53:37

我猜你做了这样的事:

代码语言:javascript
复制
import pandas as pd
import numpy as np
from scipy.stats import chi2_contingency

np.random.seed(111)

dat = pd.DataFrame({'gender':np.random.choice(['MALE','FEMALE'],100),
                  'country_destination':np.random.choice(['AU','CA','DE','ES','FR'],100)})

pt = dat.pivot_table(columns='country_destination',index='gender',
values='country_destination',aggfunc=len)

country_destination AU  CA  DE  ES  FR
gender                  
FEMALE  6   12  12  9   15
MALE    8   9   12  4   13

这项工程的意外事故:

代码语言:javascript
复制
chi2_contingency(pt)

如果你做交叉表而不是枢轴,你也会:

代码语言:javascript
复制
chi2_contingency(pd.crosstab(dat['gender'],dat['country_destination']))

最有可能的情况是,您需要提供指向应急表的计数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62601422

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档