Как исправить: valueerror: индекс содержит повторяющиеся записи, его форму невозможно изменить.


Ошибка, с которой вы можете столкнуться при использовании панд:

 ValueError : Index contains duplicate entries, cannot reshape

Эта ошибка обычно возникает, когда вы пытаетесь изменить форму DataFrame pandas с помощью функции Pivot() , но в результирующем DataFrame имеется несколько значений, которые имеют одинаковые значения индекса.

В следующем примере показано, как исправить эту ошибку на практике.

Как воспроизвести ошибку

Предположим, у нас есть следующий DataFrame pandas:

 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 имеют одинаковые значения для команды и позиции .

Поэтому, когда мы пытаемся изменить форму DataFrame, pandas не знает, какое значение точки отображать в каждой ячейке результирующего DataFrame.

Как исправить ошибку

Чтобы исправить эту ошибку, мы можем использовать функцию Pivot_table() с определенным аргументом aggfunc для агрегирования значений данных определенным образом.

Например, мы можем использовать Pivot_table() для создания нового DataFrame, который использует команды в качестве строк, позиции в качестве столбцов и сумму значений точек в ячейках DataFrame:

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

position F G
team		
At 16 12
B 21 13

Обратите внимание, что на этот раз мы не получили сообщение об ошибке.

Значения в DataFrame показывают сумму очков для каждой команды и комбинации позиций .

Обратите внимание, что мы также можем использовать другое значение для aggfunc , например среднее:

 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

Используя аргумент aggfunc в функции Pivot_table() , мы можем избежать ошибок.

Примечание. Полную документацию по функции Pivot_table() вы можете найти здесь .

Дополнительные ресурсы

В следующих руководствах объясняется, как исправить другие распространенные ошибки в Python:

Как исправить ошибку KeyError в Pandas
Как исправить: ValueError: невозможно преобразовать число с плавающей запятой NaN в int.
Как исправить: ValueError: операнды не могут быть переданы с помощью фигур.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *