修正方法: valueerror: インデックスに重複したエントリが含まれているため、再形成できません


pandas の使用時に発生する可能性のあるエラーは次のとおりです。

 ValueError : Index contains duplicate entries, cannot reshape

このエラーは通常、 pivot()関数を使用して pandas DataFrame を再形成しようとしたときに発生しますが、結果の DataFrame には同じインデックス値を共有する複数の値が存在します。

次の例は、このエラーを実際に修正する方法を示しています。

エラーを再現する方法

次のパンダ データフレームがあるとします。

 import pandas as pd

#createDataFrame
df = pd. DataFrame ({' team ': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'],
                   ' position ': ['G', 'G', 'F', 'F', 'G', 'G', 'F', 'F'],
                   ' points ': [5, 7, 7, 9, 4, 9, 9, 12]})

#view DataFrame
df

        team position points
0 A G 5
1 A G 7
2 A F 7
3 A F 9
4 B G 4
5 B G 9
6 B F 9
7 B F 12

ここで、チームを行位置を列として使用して、DataFrame を回転しようとするとします。

 #attempt to reshape DataFrame
df. pivot (index=' team ', columns=' position ', values=' points ')

ValueError : Index contains duplicate entries, cannot reshape

データフレーム内の複数の行が、チームポジションの同じ値を共有しているため、エラーが発生します。

したがって、DataFrame を再形成しようとすると、pandas は、結果として得られる DataFrame の各セルにどのポイント値を表示すべきかを知りません。

エラーを修正する方法

このエラーを修正するには、特定のaggfunc引数を指定したpivot_table()関数を使用して、特定の方法でデータ値を集計します。

たとえば、 pivot_table()を使用して、行としてチーム、列として位置、およびデータフレームのセル内のポイント値の合計を使用する新しいデータフレームを作成できます。

 df. pivot_table (index=' team ', columns=' position ', values=' points ', aggfunc=' sum ')

position F G
team		
At 16 12
B 21 13

今回はエラーが発生しないことに注意してください。

DataFrame の値は、各チームポジションの組み合わせのポイントの合計を示します。

aggfuncには、average などの別の値を使用することもできることに注意してください。

 df. pivot_table (index=' team ', columns=' position ', values=' points ', aggfunc=' mean ')

position F G
team		
At 8.0 6.0
B 10.5 6.5

pivot_table()関数でaggfunc引数を使用すると、エラーを回避できます。

注: pivot_table()関数の完全なドキュメントは、ここで見つけることができます。

追加リソース

次のチュートリアルでは、Python の他の一般的なエラーを修正する方法を説明します。

パンダの KeyError を修正する方法
修正方法: ValueError: float NaN を int に変換できません
修正方法: ValueError: オペランドをシェイプでブロードキャストできませんでした

コメントを追加する

メールアドレスが公開されることはありません。 が付いている欄は必須項目です