2017-06-04 148 views
7

使用GROUPBY也有一些是錯誤的,當我使用GROUPBY方法:類型錯誤:unhashable類型:「名單」當蟒蛇

data = pd.Series(np.random.randn(100),index=pd.date_range('01/01/2001',periods=100)) 
keys = lambda x: [x.year,x.month] 
data.groupby(keys).mean() 

,但它有一個錯誤:類型錯誤:unhashable類型:「名單」。 我想按年份和月份分組,然後計算手段,爲什麼它有錯?

回答

11

list對象不能用作關鍵字,因爲它不可哈希。首先使用它作爲GROUPBY鍵之前

>>> {[1, 2]: 3} 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: unhashable type: 'list' 
>>> {(1, 2): 3} 
{(1, 2): 3} 

data = pd.Series(np.random.randn(100), index=pd.date_range('01/01/2001', periods=100)) 
keys = lambda x: (x.year,x.month) # <---- 
data.groupby(keys).mean() 
+0

你也可以使用'operator.attrgetter':'鍵= operator.attrgetter( '年', '月')' – falsetru

2

轉換列表到STR:您可以使用tuple對象,而不是。

data.groupby(lambda x: str([x.year,x.month])).mean() 
Out[587]: 
[2001, 1] -0.026388 
[2001, 2] -0.076484 
[2001, 3] 0.155884 
[2001, 4] 0.046513 
dtype: float64 
+1

相關:[Stringly類型化(http://wiki.c2.com/ ?StringlyTyped)沒有理由 – cat

相關問題