Как исправить: 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: операнды не могут быть переданы с помощью фигур.