Come risolvere il problema: valueerror: l'indice contiene voci duplicate, non può essere rimodellato


Un errore che potresti riscontrare quando usi i panda è:

 ValueError : Index contains duplicate entries, cannot reshape

Questo errore si verifica in genere quando si tenta di rimodellare un DataFrame Panda utilizzando la funzione pivot() , ma nel DataFrame risultante sono presenti più valori che condividono gli stessi valori di indice.

L’esempio seguente mostra come correggere questo errore nella pratica.

Come riprodurre l’errore

Supponiamo di avere i seguenti panda 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

Supponiamo ora di provare a ruotare il DataFrame, utilizzando team come righe e position come colonne:

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

ValueError : Index contains duplicate entries, cannot reshape

Riceviamo un errore perché più righe nel DataFrame condividono gli stessi valori per team e posizione .

Pertanto, quando proviamo a rimodellare il DataFrame, i panda non sanno quale valore in punti visualizzare in ciascuna cella del DataFrame risultante.

Come correggere l’errore

Per correggere questo errore, possiamo utilizzare la funzione pivot_table() con un argomento specifico aggfunc per aggregare i valori dei dati in un certo modo.

Ad esempio, possiamo utilizzare pivot_table() per creare un nuovo DataFrame che utilizza team come righe, posizione come colonne e la somma dei valori in punti nelle celle del DataFrame:

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

position F G
team		
At 16 12
B 21 13

Tieni presente che questa volta non riceviamo un errore.

I valori nel DataFrame mostrano la somma dei punti per ciascuna combinazione di squadra e posizione .

Nota che potremmo anche usare un valore diverso per aggfunc , come 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

Utilizzando l’argomento aggfunc nella funzione pivot_table() , possiamo evitare eventuali errori.

Nota: puoi trovare la documentazione completa per la funzione pivot_table() qui .

Risorse addizionali

I seguenti tutorial spiegano come correggere altri errori comuni in Python:

Come correggere l’errore chiave nei Panda
Come risolvere il problema: ValueError: impossibile convertire float NaN in int
Come risolvere il problema: ValueError: non è stato possibile trasmettere gli operandi con le forme

Aggiungi un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *