为了账号安全,请及时绑定邮箱和手机立即绑定

unhashable 类型:'list' 在函数中,但在函数之外运行良好

unhashable 类型:'list' 在函数中,但在函数之外运行良好

MM们 2021-12-16 15:00:40
我将编写一个函数而不是我的旧逐行代码,但看起来它不起作用。这段代码运行良好:    def gdp_fdi(odf, colname):        tempo = odf[odf['id'].str.contains(temp, na=False)]         df = tempo[['id',colname]]        return df    def sortdf(df):        df['id'] = pd.Categorical(df.id, categories = top20code, ordered = True)        df.sort_values(by='id')        return df<THIS PART>    top20 =fdi.sort_values('fdi_1987',ascending = False).groupby('fdi_1987').head(2)    top20 = top20[['fdi_1987','id']].head(21)    top20code = top20['id']    top20code = top20code.to_string(index=False)    top20code = top20code.split()    temp = '|'.join(top20code)    top20_name=gdp_fdi(wb,'name')    top20_region=gdp_fdi(wb,'region')    top20_gdp=gdp_fdi(gdp,'gdp_1987')    sort20gdp=sortdf(top20_gdp)    sort20region=sortdf(top20_region)    sort20name=sortdf(top20_name)    from functools import reduce    lists=[sort20gdp,sort20region,sort20name]    df = reduce(lambda df1, df2: pd.merge(left=df1, right=df2, on=["id"], how="inner"), lists)    df['id'] = pd.Categorical(df.id, categories = top20code, ordered = True)    df.sort_values(by='id')    raw=df.sort_values(by='id')    raw</THIS PART>但是当我把它写成一个功能,我用'fdi_'+str(year),而不是'fdi_1987'和写<THIS PART>作为命名功能top20(year)。但是当我运行这个功能时top20(1987),它说我有不可散列的类型:'list'我可以问为什么吗?重新设计功能的任何提示?
查看完整描述

2 回答

?
牧羊人nacy

TA贡献1862条经验 获得超7个赞

Alist不能用作 akey中的 a,dictionary因为它是不可散列的。您可以使用 atuple代替。


查看完整回答
反对 回复 2021-12-16
?
ABOUTYOU

TA贡献1812条经验 获得超5个赞

可变对象是不可散列的,因为它们的散列值会随着修改而改变,因此查找将失败。切换到不可变类型,例如字符串 usingjson.dumps(somelist)或元组之类的tuple(somelist)


查看完整回答
反对 回复 2021-12-16
  • 2 回答
  • 0 关注
  • 237 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号