2016-05-18 39 views
1
pandas.DataFrame(columns=('code', 'name', ['aa', 'ab'])) 

我想創建一個數據幀,使用列表來指定一些列名的,但我得到這個錯誤:使用列表來指定大熊貓列

*** TypeError: unhashable type: 'list' 

如何解決呢?

回答

1

你想要一個迭代如列表。請記住,['a'] + ['b'] = ['a', 'b']

columns=['code', 'name'] + ['aa', 'ab'] 
>>> columns 
['code', 'name', 'aa', 'ab'] 
2

使用一個元組,而不是一個列表:

>>> pandas.DataFrame(columns=('code', 'name', ('aa', 'ab'))) 
Empty DataFrame 
Columns: [code, name, (aa, ab)] 
Index: [] 

字典關鍵字必須是「哈希的」,這意味着,給定相同的密鑰值,你總是會得到相同的響應(https://docs.python.org/2/glossary.html),甚至如果這些值存儲在不同的存儲位置。

考慮以下幾點:

>>> hash(('a','b')), hash(('a','b')) 
(-3816799034373630758, -3816799034373630758) 

>>> id(('a','b')), id(('a','b')) 
(4329654248, 4369596640) 

的兩個項目具有不同的ID(即,它們被存儲在存儲器中的不同位置),但它們具有相同的散列值;使用元組的哈希來實現元組的哈希值。

列表中沒有定義__hash__方法。即使他們這樣做了,散列值在對象的整個生命週期中也不會相同。這是因爲列表是可變的;在列表中添加一個新元素將會改變其哈希值。