Oplossing: valueerror: index bevat dubbele vermeldingen en kan niet worden aangepast


Een fout die u kunt tegenkomen bij het gebruik van panda’s is:

 ValueError : Index contains duplicate entries, cannot reshape

Deze fout treedt meestal op wanneer u probeert een panda’s DataFrame opnieuw vorm te geven met behulp van de functie pivot() , maar er zijn meerdere waarden in het resulterende DataFrame die dezelfde indexwaarden delen.

Het volgende voorbeeld laat zien hoe u deze fout in de praktijk kunt corrigeren.

Hoe de fout te reproduceren

Stel dat we de volgende panda’s DataFrame hebben:

 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

Stel nu dat we proberen het DataFrame te roteren, waarbij we team als rijen en positie als kolommen gebruiken:

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

ValueError : Index contains duplicate entries, cannot reshape

We ontvangen een foutmelding omdat meerdere rijen in het DataFrame dezelfde waarden delen voor team en position .

Dus wanneer we proberen het DataFrame opnieuw vorm te geven, weten Panda’s niet welke puntwaarde moet worden weergegeven in elke cel van het resulterende DataFrame.

Hoe u de fout kunt oplossen

Om deze fout op te lossen, kunnen we de functie pivot_table() gebruiken met een specifiek aggfunc- argument om de gegevenswaarden op een bepaalde manier te aggregeren.

We kunnen bijvoorbeeld pivot_table() gebruiken om een nieuw DataFrame te maken dat team als rijen, positie als kolommen en de som van puntwaarden in de cellen van het DataFrame gebruikt:

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

position F G
team		
At 16 12
B 21 13

Houd er rekening mee dat we deze keer geen foutmelding ontvangen.

De waarden in het DataFrame tonen de som van de punten voor elke team- en positiecombinatie .

Merk op dat we ook een andere waarde voor aggfunc kunnen gebruiken, zoals gemiddelde:

 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

Door het argument aggfunc in de functie pivot_table() te gebruiken, kunnen we eventuele fouten voorkomen.

Opmerking: u kunt de volledige documentatie voor de functie pivot_table() hier vinden.

Aanvullende bronnen

In de volgende tutorials wordt uitgelegd hoe u andere veelvoorkomende fouten in Python kunt oplossen:

Hoe KeyError in Panda’s te repareren
Oplossing: ValueError: Kan float NaN niet naar int converteren
Oplossing: ValueError: Operanden konden niet worden uitgezonden met vormen

Einen Kommentar hinzufügen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert