Одна ошибка, с которой вы можете столкнуться при использовании 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: операнды не могли транслироваться вместе с фигурами