본문 바로가기
Python/Python FAQ

Python `ValueError: cannot reindex from a duplicate axis`의 의미는 무엇인가요?, What does `ValueError: cannot reindex from a duplicate axis` mean?

by 베타코드 2023. 10. 26.
반응형

질문


나는 특정 값에 대한 인덱스를 설정하려고 할 때 ValueError: cannot reindex from a duplicate axis 오류가 발생합니다. 이 문제를 간단한 예제로 재현해 보려고 했지만 실패했습니다.

여기에는 ipdb 추적 내부의 세션 정보가 있습니다. 나는 문자열 인덱스와 정수 열, 부동 소수점 값으로 구성된 DataFrame을 가지고 있습니다. 그러나 모든 열의 합에 대한 sum 인덱스를 만들려고 할 때 ValueError: cannot reindex from a duplicate axis 오류가 발생합니다. 같은 특성을 가진 작은 DataFrame을 만들었지만 문제를 재현할 수 없었습니다. 무엇을 놓치고 있는 걸까요?

ValueError: cannot reindex from a duplicate axis가 무엇을 의미하는지 정말 이해하지 못합니다. 이 오류 메시지는 무엇을 의미하는 걸까요? 아마 이 오류 메시지를 통해 문제를 진단하는 데 도움이 될 것입니다. 이것이 내 질문 중에서 가장 답변 가능한 부분입니다.

ipdb> affinity_matrix의 형식
<class 'pandas.core.frame.DataFrame'>
ipdb> affinity_matrix의 모양
(333, 10)
ipdb> affinity_matrix의 열
Int64Index([9315684, 9315597, 9316591, 9320520, 9321163, 9320615, 9321187, 9319487, 9319467, 9320484], dtype='int64')
ipdb> affinity_matrix의 인덱스
Index([u'001', u'002', u'003', u'004', u'005', u'008', u'009', u'010', u'011', u'014', u'015', u'016', u'018', u'020', u'021', u'022', u'024', u'025', u'026', u'027', u'028', u'029', u'030', u'032', u'033', u'034', u'035', u'036', u'039', u'040', u'041', u'042', u'043', u'044', u'045', u'047', u'047', u'048', u'050', u'053', u'054', u'055', u'056', u'057', u'058', u'059', u'060', u'061', u'062', u'063', u'065', u'067', u'068', u'069', u'070', u'071', u'072', u'073', u'074', u'075', u'076', u'077', u'078', u'080', u'082', u'083', u'084', u'085', u'086', u'089', u'090', u'091', u'092', u'093', u'094', u'095', u'096', u'097', u'098', u'100', u'101', u'103', u'104', u'105', u'106', u'107', u'108', u'109', u'110', u'111', u'112', u'113', u'114', u'115', u'116', u'117', u'118', u'119', u'121', u'122', ...], dtype='object')

ipdb> affinity_matrix의 값의 형식
dtype('float64')
ipdb> affinity_matrix.index에 'sums'이 있나요?
False

다음은 오류입니다:

ipdb> affinity_matrix.loc['sums'] = affinity_matrix.sum(axis=0)
*** ValueError: cannot reindex from a duplicate axis

이 문제를 간단한 예제로 재현하려고 했지만 실패했습니다.

In [32]: import pandas as pd

In [33]: import numpy as np

In [34]: a = np.arange(35).reshape(5,7)

In [35]: df = pd.DataFrame(a, ['x', 'y', 'u', 'z', 'w'], range(10, 17))

In [36]: df.values.dtype
Out[36]: dtype('int64')

In [37]: df.loc['sums'] = df.sum(axis=0)

In [38]: df
Out[38]: 
      10  11  12  13  14  15   16
x      0   1   2   3   4   5    6
y      7   8   9  10  11  12   13
u     14  15  16  17  18  19   20
z     21  22  23  24  25  26   27
w     28  29  30  31  32  33   34
sums  70  75  80  85  90  95  100

답변


이 오류는 인덱스에 중복 값이 있을 때 열에 조인 / 할당을 할 때 일어납니다. 행에 할당하고 있기 때문에, affinity_matrix.columns에 중복 값이 있을 것으로 의심됩니다. 아마도 질문에서는 표시되지 않았을 수도 있습니다.

반응형

댓글