Як виправити: 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: операнди не можна транслювати з фігурами