Jak naprawić: błąd wartości: indeks zawiera zduplikowane wpisy, nie można go zmienić


Błąd, który możesz napotkać podczas korzystania z pand, to:

 ValueError : Index contains duplicate entries, cannot reshape

Ten błąd zwykle występuje, gdy próbujesz zmienić kształt ramki DataFrame pandy za pomocą funkcji przestawnej () , ale w wynikowej ramce DataFrame znajduje się wiele wartości, które mają te same wartości indeksu.

Poniższy przykład pokazuje, jak w praktyce skorygować ten błąd.

Jak odtworzyć błąd

Załóżmy, że mamy następującą ramkę DataFrame pand:

 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

Załóżmy teraz, że próbujemy obrócić ramkę danych, używając zespołu jako wierszy i pozycji jako kolumn:

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

ValueError : Index contains duplicate entries, cannot reshape

Otrzymujemy błąd, ponieważ wiele wierszy w DataFrame ma te same wartości dla zespołu i pozycji .

Kiedy więc próbujemy zmienić kształt ramki danych, pandy nie wiedzą, która wartość punktowa ma zostać wyświetlona w każdej komórce wynikowej ramki danych.

Jak naprawić błąd

Aby naprawić ten błąd, możemy użyć funkcji przestawnej() z konkretnym argumentem aggfunc , aby w określony sposób agregować wartości danych.

Na przykład możemy użyć metody przestawnej() , aby utworzyć nową ramkę DataFrame, która używa zespołu jako wierszy, pozycji jako kolumn i sumy wartości punktowych w komórkach DataFrame:

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

position F G
team		
At 16 12
B 21 13

Pamiętaj, że tym razem nie otrzymamy błędu.

Wartości w DataFrame pokazują sumę punktów dla każdej kombinacji zespołu i pozycji .

Zauważ, że możemy również użyć innej wartości aggfunc , takiej jak średnia:

 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

Używając argumentu aggfunc w funkcji przestawnej() , możemy uniknąć błędów.

Uwaga: pełną dokumentację funkcji przestawnej() można znaleźć tutaj .

Dodatkowe zasoby

Poniższe samouczki wyjaśniają, jak naprawić inne typowe błędy w Pythonie:

Jak naprawić błąd KeyError w Pandach
Jak naprawić: ValueError: Nie można przekonwertować float NaN na int
Jak naprawić: Błąd wartości: Nie można rozgłaszać argumentów z kształtami

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *