두 개의 열을 사용하여 두 개의 팬더 데이터 프레임을 결합하려고합니다.
new_df = pd.merge(A_df, B_df, how='left', left_on='[A_c1,c2]', right_on = '[B_c1,c2]')
그러나 다음과 같은 오류가 발생했습니다.
pandas/index.pyx in pandas.index.IndexEngine.get_loc (pandas/index.c:4164)()
pandas/index.pyx in pandas.index.IndexEngine.get_loc (pandas/index.c:4028)()
pandas/src/hashtable_class_helper.pxi in pandas.hashtable.PyObjectHashTable.get_item (pandas/hashtable.c:13166)()
pandas/src/hashtable_class_helper.pxi in pandas.hashtable.PyObjectHashTable.get_item (pandas/hashtable.c:13120)()
KeyError: '[B_1, c2]'
이 작업을 수행하는 올바른 방법은 무엇입니까? 감사!
답변
이 시도
new_df = pd.merge(A_df, B_df, how='left', left_on=['A_c1','c2'], right_on = ['B_c1','c2'])
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.merge.html
left_on : 레이블 또는 목록 또는 왼쪽 DataFrame에서 결합 할 배열과 같은 필드 이름입니다. 열 대신 결합 키로 특정 벡터를 사용하기 위해 DataFrame 길이의 벡터 또는 벡터 목록 일 수 있습니다.
right_on : left_on 문서 당 오른쪽 DataFrame 또는 벡터 / 벡터 목록에서 결합 할 레이블 또는 목록 또는 배열과 같은 필드 이름
답변
여기서 문제는 아포스트로피를 사용하여 실제로 @Shijo가 문서에서 언급했듯이 함수가 레이블이나 목록을 기대하지만 문자열은 아닌 문자열로 전달되는 값을 설정한다는 것입니다! 목록에 왼쪽 및 오른쪽 데이터 프레임 모두에 전달되는 각 열 이름이 포함 된 경우 각 열 이름 은 개별적으로 아포스트로피 내에 있어야합니다 . 언급 된 내용을 통해 이것이 왜 잘못되었는지 이해할 수 있습니다.
new_df = pd.merge(A_df, B_df, how='left', left_on='[A_c1,c2]', right_on = '[B_c1,c2]')
그리고 이것은 함수를 사용하는 올바른 방법입니다.
new_df = pd.merge(A_df, B_df, how='left', left_on=['A_c1','c2'], right_on = ['B_c1','c2'])
답변
이를 수행하는 다른 방법 :
new_df = A_df.merge(B_df, left_on=['A_c1','c2'], right_on = ['B_c1','c2'], how='left')