Python数据科学导论中的断言错误,coursera

2024-09-29 18:44:22 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我的代码:

def chickenpox_by_sex():
    import pandas as pd
    df= pd.read_csv('assets/NISPUF17.csv')
    df=df[df['P_NUMVRC']==1]
    a=df[df['HAD_CPOX']==1]
    b=df[df['HAD_CPOX']==2]
    m_flu=len(a[a['SEX']==1])
    m_noflu=len(b[b['SEX']==1])
    f_flu=len(a[a['SEX']==2])
    f_noflu=len(b[b['SEX']==2])
    
    dict={"male":m_flu/m_noflu,"female":f_flu/f_noflu}
    print (dict)
chickenpox_by_sex()

下面是我收到的错误:

TypeError                                 Traceback (most recent call last)
    <ipython-input-6-3c57eb17d825> in <module>
    ----> 1 assert len(chickenpox_by_sex())==2, "Return a dictionary with two items, the first for males and the second for females."
          2 

有人能解释一下情况吗


Tags: csvthedfforbylendictpd
2条回答

函数chickenpox_by_sex()不返回任何长度为2的内容。事实上,它返回None。这相当于:

>>> assert len(None)==2, "Return a dictionary with two items, the first for males and the second for females."
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: object of type 'NoneType' has no len()

它甚至在测试断言之前就失败了

我认为您应该从函数返回字典:

result = {"male" : m_flu/m_noflu, "female" : f_flu/f_noflu}
print(result)
return result

如果要在从函数返回之前打印它。或者您可以简单地返回一个dict:

return {"male" : m_flu/m_noflu, "female" : f_flu/f_noflu}

然后:

>>> assert len({"male" : 1, "female" : 2})==2

会过去的

import pandas as pd
import numpy as np

def chickenpox_by_sex():
    df = pd.read_csv('assets/NISPUF17.csv', index_col=0)

    cpo_sex = df[df['P_NUMVRC'].gt(0) & df['HAD_CPOX'].lt(3)].loc[:,['HAD_CPOX','SEX']]
    
    print(cpo_sex)

    one_male = (cpo_sex[(cpo_sex['HAD_CPOX']== 1) & (cpo_sex['SEX']== 1)]).size
    one_female = (cpo_sex[(cpo_sex['HAD_CPOX']== 1) & (cpo_sex['SEX']== 2)]).size

    more_male = (cpo_sex[(cpo_sex['HAD_CPOX'] == 2) & (cpo_sex['SEX']== 1)]).size
    more_female = (cpo_sex[(cpo_sex['HAD_CPOX'] == 2) & (cpo_sex['SEX']== 2)]).size

    chickenpox_by_sex = {'male': one_male/more_male,
                         'female': one_female/more_female}
    print(chickenpox_by_sex)

    return chickenpox_by_sex

相关问题 更多 >

    热门问题