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


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

ValueError : Index contains duplicate entries, cannot reshape

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

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

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

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

import pandas as pd

#create DataFrame
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 
A 16 12
B 21 13

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

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

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

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

position F G
team 
A 8.0 6.0
B 10.5 6.5

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

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

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

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

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

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.