解决Nested Renamer错误并按大洲构建人口统计DataFrame
问题:按大洲分组统计人口数据并修正"Nested Renamer not supported"错误
需求说明
- 使用给定的
ContinentDict字典将国家按大洲分组 - 创建DataFrame,展示每个大洲的以下统计项:
- 样本量(组内国家数量)
- 各国人口估计值的总和、均值、标准差
- DataFrame索引需为指定列表
['Asia', 'Australia', 'Europe', 'North America', 'South America'],列名为['size', 'sum', 'mean', 'std']
给定字典
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'}
错误代码及问题
当前代码运行时抛出**"Nested Renamer not supported"**错误:
top15 = answer_one() 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'} top15['Continent'] = top15.index.to_series().map(ContinentDict) top15['Population Estimate']= (top15['Energy Supply']/top15['Energy Supply per Capita']).astype(float) result = top15.set_index('Continent').groupby(level = 0)['Population Estimate'].agg({'size':np.size, 'sum':np.sum, 'mean':np.mean,'std':np.std}) return result
修正方案
错误根源是Pandas 0.25及以上版本不再支持用字典传递列名映射给agg()方法,需改用关键字参数或元组列表指定聚合规则,同时还要按要求固定索引顺序。
修正后的完整代码:
import numpy as np import pandas as pd top15 = answer_one() # 假设该函数返回包含所需数据的DataFrame 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'} # 添加大洲列和人口估计列 top15['Continent'] = top15.index.to_series().map(ContinentDict) top15['Population Estimate'] = (top15['Energy Supply'] / top15['Energy Supply per Capita']).astype(float) # 修正聚合方式,用关键字参数指定列名与对应聚合函数 result = top15.groupby('Continent')['Population Estimate'].agg( size=np.size, sum=np.sum, mean=np.mean, std=np.std ) # 按指定顺序重新排列索引 target_index = ['Asia', 'Australia', 'Europe', 'North America', 'South America'] result = result.reindex(target_index) return result
关键修正点
- 聚合写法调整:放弃字典式的聚合参数,改用关键字参数传递列名和对应函数,适配Pandas新版本规范,避免嵌套重命名错误。
- 索引顺序固定:通过
reindex()方法将结果索引调整为需求指定的大洲顺序,确保输出符合要求。
内容的提问来源于stack exchange,提问作者Aryan Jain
相关产品推荐
相关产品推荐

