스택큐힙리스트

판다스: 두 개의 데이터 프레임을 여러 열에 대해 병합(join)하기 본문

카테고리 없음

판다스: 두 개의 데이터 프레임을 여러 열에 대해 병합(join)하기

스택큐힙리스트 2023. 4. 28. 02:51
반응형

저는 두 개의 열을 사용하여 두 판다 데이터프레임을 결합하려고 합니다.

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]'

이걸 제대로 처리하는 올바른 방법이 뭐죠?

답변 1

이것을 시도해보세요.

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 : 라벨 또는 리스트 또는 배열, 왼쪽의 조인에 사용할 필드 이름. 벡터 또는 벡터 목록이 될 수 있으며, 열 대신 특정 벡터를 조인 키로 사용하기 위해 데이터 프레임의 길이와 동일한 길이의 벡터 또는 벡터 목록일 수 있습니다.

right_on : 라벨 또는 리스트 또는 어레이-타입, 왼쪽 DataFrame 또는 left_on docs에서 벡터/리스트로 구성된 오른쪽 DataFrame의 필드 이름과 조인할 필드 이름.

답변 2

펜달스: 여러 열을 기준으로 두 개의 데이터 프레임 병합(조인)하기

펜달스(Pandas)는 파이썬의 데이터 조작 및 분석에 가장 많이 사용되는 라이브러리 중 하나입니다. 이 라이브러리를 사용하면 데이터 프레임(DataFrame)을 손쉽게 다룰 수 있습니다. 특히, 두 개의 데이터 프레임을 병합(조인)할 때 많은 기능을 제공합니다. 이번 글에서는 펜달스를 사용하여 여러 열을 기준으로 두 개의 데이터 프레임을 병합하는 방법에 대해 알아보겠습니다.

먼저, 두 개의 데이터 프레임을 만들어 보겠습니다. 첫 번째 데이터 프레임(df1)은 학생들의 성적을 나타냅니다.

```python

import pandas as pd

df1 = pd.DataFrame({

'이름': ['김철수', '이영희', '박영수', '홍길동'],

'국어': [80, 90, 70, 60],

'영어': [70, 80, 90, 60]

})

```

두 번째 데이터 프레임(df2)은 학생들의 정보를 나타냅니다.

```python

df2 = pd.DataFrame({

'이름': ['김철수', '이영희', '박영수', '홍길동'],

'학년': [1, 2, 3, 1],

'성별': ['남', '여', '남', '남']

})

```

이제 두 개의 데이터 프레임을 병합해 보겠습니다. 병합에는 merge() 함수를 사용합니다. 여기서는 '이름' 열을 기준으로 병합해 보겠습니다.

```python

result = pd.merge(df1, df2, on='이름')

```

이렇게 하면 '이름' 열을 기준으로 두 개의 데이터 프레임이 병합됩니다. 이 때, 기본적으로 inner join 방식이 사용됩니다. 따라서 공통된 '이름' 열이 있는 학생들만 결과에 포함됩니다. 결과를 출력해 보겠습니다.

```

이름 국어 영어 학년 성별

0 김철수 80 70 1 남

1 이영희 90 80 2 여

2 박영수 70 90 3 남

3 홍길동 60 60 1 남

```

기본적으로 merge() 함수는 중복된 열 이름이 있을 경우, '_x'와 '_y'를 사용하여 구분합니다. 예를 들어, '이름' 열이 두 개의 데이터 프레임에 모두 포함되어 있기 때문에, 결과에서는 '이름_x'와 '이름_y' 열이 포함됩니다. 이를 해결하기 위해서는 on 매개변수를 리스트로 지정하면 됩니다.

```python

result = pd.merge(df1, df2, on=['이름', '학년'])

```

이제 '이름'과 '학년' 열을 모두 기준으로 병합하게 됩니다.

이와 같이 펜달스를 사용하여 여러 열을 기준으로 두 개의 데이터 프레임을 병합할 수 있습니다. 이를 활용하면 다양한 데이터 조작과 분석이 가능해집니다.

반응형
Comments