groupby.mean() 不起作用,而 sum()、std() 和 size() 都起作用

我正在关注密歇根大学关于 Python Pandas 中的数据科学的 MOOC,我在测试中遇到了一些问题。


我必须使用 groupby 函数来计算按大陆分组的 15 个国家的总和、平均值、大小和标准差。


问题是 sum()、std() 和 size() 可以正常工作,但 mean() 不行,我不知道为什么。


我已经尝试通过使用来指定类型,dtype=float但我不工作。


这是我的代码:


# --------- This part is ok, just describing so you can understand --------- #

Top15 = answer_one() # load top 15 countries with most scientific publications


# list of the continents for the top 15 countries

ContinentDict  = {'China':'Asia', 

                  'United States':'North America', 

                  'Japan':'Asia', 

                  'United Kingdom':'Europe', 

                  'Russian Federation':'Europe', 

                  'Canada':'North America', 

                  'Germany':'Europe', 

                  'India':'Asia',

                  'France':'Europe', 

                  'South Korea':'Asia', 

                  'Italy':'Europe', 

                  'Spain':'Europe', 

                  'Iran':'Asia',

                  'Australia':'Australia', 

                  'Brazil':'South America'}


# estimation of the population for each countries 

# by calculating the Energy Supply / Energy Supply per Capita

Top15['PopEst'] = Top15['Energy Supply'] / Top15['Energy Supply per Capita']

Top15 = Top15[['PopEst']]


Top15.reset_index(inplace = True)

Top15['Continent'] = None


# loop that add the coresponding continent to the country

for country in Top15['Country']:

    index_country = ((Top15.loc[Top15['Country'] == country]) # seek country index

                           .index)

    Top15.iloc[index_country,2] = ContinentDict[country] # add continent to country



梦里花落0921
浏览 305回答 2
2回答

芜湖不芜

这是一个错误Pandas,即使数据不是数字,Pandas 仍然在 groupby 中进行 sum 和 prod 计算。我检查了源代码,该错误出现在site-packages\pandas\core\groupby\groupby.py. 它写道:                except Exception:                                     pass如果您打印错误,您可能还会发现“没有要聚合的数字类型”。作为一种解决方案,您可以在使用以下方法进行任何计算之前将数据更改为数值:df['column'] = pd.to_numeric(df['column'])某些帖子可能会告诉您在errors='coerce'内部添加,pd.to_numeric以便将替换非数字元素na并且不会引发错误。但是,在许多情况下,这意味着数据中存在一些错误。我们需要修复数据而不是消除错误。

慕哥9229398

这是我能想到的最好的    final["Sum"]= final.groupby(['Cont_bin']).PopEst.transform('sum')    final['Sum'] = pd.to_numeric(final['Sum'])    final["PopEst"]= pd.to_numeric(final["PopEst"])    final["Size"]=pd.to_numeric(final["Size"])    final["Mean"]=final.groupby(['Cont_bin', 'Size']).PopEst.transform('mean')       return(final)您需要将平均值强制转换为数字以获得标准偏差
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python