2016-05-18 11 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) 

2つの項目が異なるIDを持っている(すなわち、それらがメモリ内の異なる場所に格納されている)が、それらは同じハッシュ値を持ちます。タプルのハッシュは、タプルを構成するビットのハッシュを使用して実装されます。

リストには__hash__メソッドが定義されていません。たとえそれがあったとしても、ハッシュ値はオブジェクトの存続期間全体にわたって同じではありません。これは、リストが変更可能であるためです。新しい要素をリストに追加すると、そのハッシュ値が変更されます。