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