Як виправити: valueerror: індекс містить повторювані записи, не можна змінити форму


Помилка, з якою ви можете зіткнутися під час використання панд:

 ValueError : Index contains duplicate entries, cannot reshape

Ця помилка зазвичай виникає, коли ви намагаєтеся змінити форму pandas DataFrame за допомогою функції pivot() , але в отриманому DataFrame є кілька значень, які мають однакові значення індексу.

У наступному прикладі показано, як виправити цю помилку на практиці.

Як відтворити помилку

Припустімо, що у нас є наступні pandas DataFrame:

 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, який використовує team як рядки, позицію як стовпці та суму точкових значень у клітинках 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: неможливо перетворити float NaN на int
Як виправити: ValueError: операнди не можна транслювати з фігурами

Додати коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *