2017-06-04 13 views
7

Có gì đó sai khi tôi sử dụng phương pháp groupby:Lỗi Loại: loại unhashable: 'danh sách' khi sử dụng groupby trong python

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() 

nhưng nó có một lỗi: Lỗi Loại: unhashable loại: 'danh sách'. Tôi muốn nhóm theo năm và tháng, sau đó tính toán các phương tiện, tại sao nó đã sai?

Trả lời

11

list đối tượng không thể được sử dụng làm khóa vì nó không thể băm. Bạn có thể sử dụng tuple đối tượng thay vì:

>>> {[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

Bạn cũng có thể sử dụng 'operator.attrgetter':' key = operator.attrgetter ('năm', 'tháng') ' – falsetru

2

Chuyển đổi danh sách để một str đầu tiên trước khi sử dụng nó như là phím groupby.

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

liên quan: [Stringly Typed] (http://wiki.c2.com/ ? StringlyTyped) không có lý do – cat

Các vấn đề liên quan