繁体   English   中英

获取类型错误:“系列”对象是可变的,因此在使用 function 将列中的 int 转换为季节时,它们不能被散列

[英]Getting a TypeError: 'Series' objects are mutable, thus they cannot be hashed when using a function to convert a int in a column to a season

我有一个名为“温度”的数据框,其中包含一个值为 1 - 12 的月份列,我编写了一个 function 来获取月份编号并返回获取数据的南半球的季节。

def find_season(month):

    season_month = {
    12:'Summer', 1:'Summer', 2:'Summer',
    3:'Autumn', 4:'Autumn', 5:'Autumn',
    6:'Winter', 7:'Winter', 8:'Winter',
    9:'Spring', 10:'Spring', 11:'Spring'}
    return season_month.get(month)

我想实现如下output

Year    Month   Season                          
1955    2       Summer
1955    3       Autumn
1955    7       Winter
1955    12      Summer

但是当我 go 使用我的公式填充季节列时

temperatures['Season'] = temperatures.apply(find_season(temperatures.Month))
OR
temperatures['Season'] = find_season(temperatures.Month)

我得到错误

TypeError: 'Series' objects are mutable, thus they cannot be hashed.

我宁愿使用 function,因为我觉得这段代码可能对我正在做的其他分析有用,但无法弄清楚如何解决我面临的问题。

错误是说字典中的键必须是常量、不可变的 object,就像示例中的字符串或数字一样。

我看不出你是如何从那个代码中得到那个错误的,所以我猜这是一个例子,在你的真实代码中你正在做温度[x],x是一个指向object系列的变量,这就是问题所在; Series 类型的对象不是常量,因此不能用作字典中的键。

这是解决方案:

def find_season(month):
    season_month = {
    12:'Summer', 1:'Summer', 2:'Summer',
    3:'Autumn', 4:'Autumn', 5:'Autumn',
    6:'Winter', 7:'Winter', 8:'Winter',
    9:'Spring', 10:'Spring', 11:'Spring'}
    return season_month.get(month)

temperatures={}
temperatures["Month"]=[1,2,3,4,5,6,7,8,9,10,11,12]
seasonlist=[]
for month in temperatures["Month"]:
    season = find_season(month)
    seasonlist.append(season)

temperatures["Season"] = seasonlist
print(temperatures)

Output:

{'Month': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], 'Season': ['Summer', 'Summer', 'Autumn', 'Autumn', 'Autumn', 'Winter', 'Winter', 'Winter', 'Spring', 'Spring', 'Spring', 'Summer']}

所以你的代码中有几个错误,一个是你试图从温度字典( temperatures.Month )中获取 Month 属性,你应该参考它的键值: temperatures["Month"]

另一个问题是temperatures["Month"]是一个列表,您将它传递给一个 function ,它采用单个数字。 您需要遍历月份数组才能获得每个月的季节。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM