반응형
질문
나는 특정 값에 대한 인덱스를 설정하려고 할 때 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
에 중복 값이 있을 것으로 의심됩니다. 아마도 질문에서는 표시되지 않았을 수도 있습니다.
반응형
댓글