2017-03-27 7 views
2

2行200列のデータフレームを別のデータフレームの先頭に追加しようとしましたが、TypeError:unhashable type: 'dict'があります。 これは私が使用しているコードです: dfは、最終行のデータフレームに追加しようとしている2行と約200列の最初のデータフレームです。TypeError:unhashable type:pandasを使用すると「dict」マルチインデックス

finaldata.columns = pd.MultiIndex.from_arrays([df.values[0], finaldata.columns]) 

私は(タイプとデータフレームの種類を確認してください)、私はpandas.core.frame.DataFrame

答えて

2

を得たことは、dfの第一および第二列あなたが位置によって選択のためのilocを必要とするようだ:

finaldata.columns = pd.MultiIndex.from_arrays([df.iloc[0], df.iloc[1], finaldata.columns]) 

サンプル:

df = pd.DataFrame({'a':[2,3], 
        'b':[5,6], 
        'c':[1,5], 
        'd':[4,5], 
        'e':[1,5], 
        'f':[8,9]}) 

print (df) 
    a b c d e f 
0 2 5 1 4 1 8 
1 3 6 5 5 5 9 

finaldata = pd.DataFrame({'A':[1,2,3], 
         'B':[4,5,6], 
         'C':[7,8,9], 
         'D':[1,3,5], 
         'E':[5,3,6], 
         'F':[7,4,3]}) 

print (finaldata) 
    A B C D E F 
0 1 4 7 1 5 7 
1 2 5 8 3 3 4 
2 3 6 9 5 6 3 

names = ['first','second','third'] 
finaldata.columns = pd.MultiIndex.from_arrays([df.iloc[0], 
               df.iloc[1], 
               finaldata.columns], names=names) 
print (finaldata) 
first 2 5 1 4 1 8 
second 3 6 5 5 5 9 
third A B C D E F 
0  1 4 7 1 5 7 
1  2 5 8 3 3 4 
2  3 6 9 5 6 3 

numpy.concatenateのもう一つの解決策:

a = np.concatenate([df.values, np.array(finaldata.columns).reshape(-1,df.shape[1])]).tolist() 
print (a) 
[[2, 5, 1, 4, 1, 8], [3, 6, 5, 5, 5, 9], ['A', 'B', 'C', 'D', 'E', 'F']] 

names = ['first','second','third'] 
finaldata.columns = pd.MultiIndex.from_arrays(a, names=names) 
print (finaldata) 
first 2 5 1 4 1 8 
second 3 6 5 5 5 9 
third A B C D E F 
0  1 4 7 1 5 7 
1  2 5 8 3 3 4 
2  3 6 9 5 6 3 

EDIT:

ソリューションは、非常に類似している必要がありますreindex列:

df = pd.DataFrame({'A':[2,3], 
        'B':[5,6], 
        'C':[1,5], 
        'D':[4,5], 
        'E':[1,5], 
        'F':[8,9]}) 

print (df) 
    A B C D E F 
0 2 5 1 4 1 8 
1 3 6 5 5 5 9 

finaldata = pd.DataFrame({'A':[1,2,3], 
          'B':[4,5,6], 
          'E':[7,8,9], 
          'F':[1,3,5]}) 

print (finaldata) 
    A B E F 
0 1 4 7 1 
1 2 5 8 3 
2 3 6 9 5 

df1 = df.reindex(columns=finaldata.columns) 
print (df1) 
    A B E F 
0 2 5 1 8 
1 3 6 5 9 

names = ['first','second','third'] 
finaldata.columns = pd.MultiIndex.from_arrays([df1.iloc[0], 
               df1.iloc[1], 
               finaldata.columns], names=names) 
print (finaldata) 
first 2 5 1 8 
second 3 6 5 9 
third A B E F 
0  1 4 7 1 
1  2 5 8 3 
2  3 6 9 5 
+0

I THIその問題は異なる数の列であり、df dataframeは参照オブジェクトで作られたデータフレームであるため、より多くの列を持ちます。 最終的なデータに表示されるdfの列を追加するにはどうすればいいですか? 申し訳ありません。 @jezrael – jovicbg

+0

編集した回答を確認してください。 – jezrael

+0

私は再び同じ問題を抱えています。 ありがとうございます:) – jovicbg

関連する問題