簡體   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