수정 방법: valueerror: 인덱스에 중복된 항목이 포함되어 있어 모양을 변경할 수 없습니다.
pandas를 사용할 때 발생할 수 있는 오류는 다음과 같습니다.
ValueError : Index contains duplicate entries, cannot reshape
이 오류는 일반적으로 피벗() 함수를 사용하여 pandas DataFrame의 모양을 변경하려고 할 때 발생하지만 결과 DataFrame에 동일한 인덱스 값을 공유하는 여러 값이 있습니다.
다음 예에서는 실제로 이 오류를 수정하는 방법을 보여줍니다.
오류를 재현하는 방법
다음과 같은 팬더 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의 여러 행이 team 및 position 에 대해 동일한 값을 공유하기 때문에 오류가 발생합니다.
따라서 DataFrame의 모양을 변경하려고 할 때 pandas는 결과 DataFrame의 각 셀에 어떤 포인트 값을 표시할지 알 수 없습니다.
오류를 수정하는 방법
이 오류를 해결하려면 특정 aggfunc 인수와 함께 ivot_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
ivot_table() 함수에서 aggfunc 인수를 사용하면 오류를 피할 수 있습니다.
참고: 여기서 Pivot_table() 함수에 대한 전체 문서를 찾을 수 있습니다.
추가 리소스
다음 튜토리얼에서는 Python의 다른 일반적인 오류를 수정하는 방법을 설명합니다.
Pandas에서 KeyError를 수정하는 방법
해결 방법: ValueError: float NaN을 int로 변환할 수 없습니다.
해결 방법: ValueError: 피연산자를 모양과 함께 브로드캐스트할 수 없습니다.