[python] 팬더 조인 문제 : 열이 겹치지 만 접미사가 지정되지 않았습니다.

다음과 같은 2 개의 데이터 프레임이 있습니다.

df_a =

     mukey  DI  PI
0   100000  35  14
1  1000005  44  14
2  1000006  44  14
3  1000007  43  13
4  1000008  43  13

df_b = 
    mukey  niccdcd
0  190236        4
1  190237        6
2  190238        7
3  190239        4
4  190240        7

이 두 데이터 프레임에 참여하려고하면 :

join_df = df_a.join(df_b,on='mukey',how='left')

오류가 발생합니다.

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

왜 그렇습니까? 데이터 프레임에는 공통 ‘mukey’값이 있습니다.



답변

게시 한 데이터 스 니펫에 대한 오류는 공통적 인 값이 없기 때문에 값이 겹치지 않기 때문에 조인 작업이 실패하므로 왼쪽과 오른쪽에 접미사를 제공해야한다는 점에서 약간의 암호입니다.

In [173]:

df_a.join(df_b, on='mukey', how='left', lsuffix='_left', rsuffix='_right')
Out[173]:
       mukey_left  DI  PI  mukey_right  niccdcd
index                                          
0          100000  35  14          NaN      NaN
1         1000005  44  14          NaN      NaN
2         1000006  44  14          NaN      NaN
3         1000007  43  13          NaN      NaN
4         1000008  43  13          NaN      NaN

merge 이 제한이 없기 때문에 작동합니다.

In [176]:

df_a.merge(df_b, on='mukey', how='left')
Out[176]:
     mukey  DI  PI  niccdcd
0   100000  35  14      NaN
1  1000005  44  14      NaN
2  1000006  44  14      NaN
3  1000007  43  13      NaN
4  1000008  43  13      NaN


답변

.join()기능은 사용 index사용한다, 그래서 인수 데이터 세트로 전달의를 set_index또는 사용 .merge대신에 기능.

귀하의 경우에 적합한 두 가지 예를 찾으십시오.

join_df = LS_sgo.join(MSU_pi.set_index('mukey'), on='mukey', how='left')

또는

join_df = df_a.merge(df_b, on='mukey', how='left')


답변

이 오류는 두 테이블에 동일한 열 이름을 가진 하나 이상의 열 이름이 있음을 나타냅니다. 오류 메시지는 다음과 같이 번역됩니다. “두 테이블에서 동일한 열을 볼 수 있지만 그 중 하나를 가져 오기 전에 이름을 바꾸라고 말하지 않았습니다.”

del df [ ‘column name’]을 사용하여 다른 열을 가져 오기 전에 열 중 하나를 삭제하거나 lsuffix를 사용하여 원래 열을 다시 쓰거나 rsuffix를 사용하여 가져 오는 열의 이름을 바꾸려고합니다.

df_a.join(df_b, on='mukey', how='left', lsuffix='_left', rsuffix='_right')


답변

주로 조인은 속성 이름이 아닌 인덱스를 기반으로 조인하는 데 독점적으로 사용되므로 두 개의 다른 데이터 프레임에서 속성 이름을 변경 한 다음 조인을 시도하면 조인됩니다. 그렇지 않으면이 오류가 발생합니다


답변