수정방법: 열이 겹치는데 접미사가 지정되지 않음


pandas를 사용할 때 발생할 수 있는 오류는 다음과 같습니다.

 ValueError : columns overlap but no suffix specified: Index(['column'], dtype='object')

이 오류는 하나 이상의 공통 열 이름을 공유하는 두 개의 데이터 프레임을 조인하려고 할 때 발생하며 새 데이터 프레임의 열을 구별하기 위해 왼쪽 또는 오른쪽 데이터 프레임에 접미사가 제공되지 않습니다.

이 오류를 해결하는 방법에는 두 가지가 있습니다.

해결 방법 1: 접미사 이름을 제공합니다.

 df1. join (df2, how = ' left ', lsuffix=' left ', rsuffix=' right ')

해결 방법 2: 대신 병합 기능을 사용하세요.

 df1. merge (df2, how = ' left ')

다음 예에서는 실제로 이 오류를 수정하는 방법을 보여줍니다.

오류를 재현하는 방법

다음 두 데이터 프레임을 하나로 합치려고 한다고 가정해 보겠습니다.

 import pandas as pd

#create first data frame
df1 = pd. DataFrame ({' player ': ['A', 'B', 'C', 'D', 'E', 'F'],
                    ' points ': [5, 7, 7, 9, 12, 9],
                    ' assists ': [11, 8, 10, 6, 6, 5]})

#create second data frame
df2 = pd. DataFrame ({' player ': ['A', 'B', 'C', 'D', 'E', 'F'],
                    ' rebounds ': [4, 4, 6, 9, 13, 16],
                    ' steals ': [2, 2, 1, 4, 3, 2]})

#attempt to perform left join on data frames
df1. join (df2, how = ' left ')

ValueError : columns overlap but no suffix specified: Index(['player'], dtype='object')

두 데이터 프레임이 모두 “플레이어” 열을 공유하기 때문에 오류가 발생하지만 새 데이터 프레임의 열을 구별하기 위해 왼쪽 또는 오른쪽 데이터 프레임에 접미사가 제공되지 않습니다.

오류를 수정하는 방법

이 오류를 해결하는 한 가지 방법은 왼쪽 또는 오른쪽 데이터 프레임에 접미사 이름을 제공하는 것입니다.

 #perform left join on data frames with suffix provided
df1. join (df2, how = ' left ', lsuffix=' left ', rsuffix=' right ')

        playerleft points assists playerright rebounds steals
0 A 5 11 A 4 2
1 B 7 8 B 4 2
2 C 7 10 C 6 1
3 D 9 6 D 9 4
4 E 12 6 E 13 3
5 F 9 5 F 16 2

이 오류를 해결하는 또 다른 방법은 두 데이터 프레임을 결합할 때 이 문제가 발생하지 않는 merge() 함수를 사용하는 것입니다.

 #merge two data frames
df1. merge (df2, how = ' left ')

	player points assists rebounds steals
0 A 5 11 4 2
1 B 7 8 4 2
2 C 7 10 6 1
3 D 9 6 9 4
4 E 12 6 13 3
5 F 9 5 16 2

merge() 함수는 단순히 첫 번째 데이터 프레임에 이미 속한 두 번째 데이터 프레임의 모든 이름을 제거한다는 점에 유의하세요.

추가 리소스

인덱스에 두 개의 Pandas DataFrame을 병합하는 방법
여러 열에 걸쳐 Pandas DataFrame을 병합하는 방법
Pandas DataFrame에 Numpy 배열을 추가하는 방법

의견을 추가하다

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다