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