[英]Getting error in dataframe typeError: 'Series' objects are mutable, thus they cannot be hashed
[英]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.