에코프로.AI

[Python] Pandas - DataFrame 합치기 (Feat. concat(), merge(), join()) 본문

AI Tutorial

[Python] Pandas - DataFrame 합치기 (Feat. concat(), merge(), join())

AI_HitchHiker 2024. 11. 5. 14:23

DALL-E 에서 생성된 이미지입니다. (python 에서 dataframe 합치는 방법들에 대한 코드를 알려줘. 에 맞는 블로그 상단이미지를 만들어줘)

 

Python에서 DataFrame을 합치는 방법에는 크게 세 가지가 있습니다.
concat(), merge(), 그리고 join(). 각각의 함수는 다른 상황에서 유용하게 사용됩니다.
아래에 각 방법에 대한 설명과 예시 코드를 제공합니다.

 

1. concat(): DataFrame을 단순히 연결 (위아래 또는 좌우로)

concat() 함수는 여러 DataFrame을 세로(행) 또는 가로(열) 방향으로 연결할 때 사용됩니다.

예시:

import pandas as pd

# 두 개의 DataFrame 생성
df1 = pd.DataFrame({
    'A': ['A0', 'A1', 'A2', 'A3'],
    'B': ['B0', 'B1', 'B2', 'B3']
})

df2 = pd.DataFrame({
    'A': ['A4', 'A5', 'A6', 'A7'],
    'B': ['B4', 'B5', 'B6', 'B7']
})

# 세로로 연결 (행 기준)
df_concat = pd.concat([df1, df2], axis=0)
print(df_concat)

# 가로로 연결 (열 기준)
df_concat_columns = pd.concat([df1, df2], axis=1)
print(df_concat_columns)
  • 결과:
    • 세로 연결:
    A   B
0  A0  B0
1  A1  B1
2  A2  B2
3  A3  B3
0  A4  B4
1  A5  B5
2  A6  B6
3  A7  B7
  • 가로 연결:
    A   B   A   B
0  A0  B0  A4  B4
1  A1  B1  A5  B5
2  A2  B2  A6  B6
3  A3  B3  A7  B7

 

2. merge(): 공통 컬럼을 기준으로 병합

merge()는 SQL의 JOIN과 유사하게 두 DataFrame을 공통된 컬럼을 기준으로 병합할 때 사용됩니다.

예시:

import pandas as pd

# 두 개의 DataFrame 생성 (공통 키 컬럼이 존재)
left = pd.DataFrame({
    'Key': ['K0', 'K1', 'K2', 'K3'],
    'A': ['A0', 'A1', 'A2', 'A3'],
    'B': ['B0', 'B1', 'B2', 'B3']
})

right = pd.DataFrame({
    'Key': ['K0', 'K1', 'K2', 'K4'],
    'C': ['C0', 'C1', 'C2', 'C4'],
    'D': ['D0', 'D1', 'D2', 'D4']
})

# 내부 조인 (inner join, 공통된 Key 값만 병합)
df_merge_inner = pd.merge(left, right, on='Key')
print(df_merge_inner)

# 외부 조인 (outer join, 모든 Key 값을 병합하고 없는 값은 NaN 처리)
df_merge_outer = pd.merge(left, right, on='Key', how='outer')

# merge key값은 left, right 따로 설정하는 방법
# merged_df = pd.merge(df1, df2, left_on='lkey', right_on='rkey', how='inner')

print(df_merge_outer)

결과:

  • 내부 조인:
   Key   A   B   C   D
0   K0  A0  B0  C0  D0
1   K1  A1  B1  C1  D1
2   K2  A2  B2  C2  D2
  • 외부 조인:
   Key   A   B    C    D
0   K0  A0  B0   C0   D0
1   K1  A1  B1   C1   D1
2   K2  A2  B2   C2   D2
3   K3  A3  B3  NaN  NaN
4   K4 NaN NaN   C4   D4

 

3. join(): 인덱스를 기준으로 병합

join()은 두 DataFrame을 인덱스를 기준으로 병합할 때 사용됩니다. 보통 set_index()를 통해 인덱스를 설정한 후 사용합니다.

예시:

import pandas as pd

# 두 개의 DataFrame 생성 (인덱스를 기준으로 병합)
left = pd.DataFrame({
    'A': ['A0', 'A1', 'A2'],
    'B': ['B0', 'B1', 'B2']
}, index=['K0', 'K1', 'K2'])

right = pd.DataFrame({
    'C': ['C0', 'C1', 'C2'],
    'D': ['D0', 'D1', 'D2']
}, index=['K0', 'K1', 'K3'])

# 인덱스를 기준으로 병합 (기본은 왼쪽 조인)
df_join = left.join(right, how='left')
print(df_join)

# 인덱스를 기준으로 외부 조인 (outer join)
df_join_outer = left.join(right, how='outer')
print(df_join_outer)

결과:

  • 왼쪽 조인:
     A   B    C    D
K0  A0  B0   C0   D0
K1  A1  B1   C1   D1
K2  A2  B2  NaN  NaN
  • 외부 조인:
     A    B    C    D
K0   A0   B0   C0   D0
K1   A1   B1   C1   D1
K2   A2   B2 NaN NaN
K3 NaN NaN   C2   D2

 

요약:

  • concat(): 여러 DataFrame을 위아래 또는 좌우로 단순히 이어 붙입니다.
  • merge(): 공통된 컬럼을 기준으로 SQL 스타일의 JOIN을 수행합니다.
  • join(): 인덱스를 기준으로 두 DataFrame을 병합합니다.

필요한 상황에 맞게 적절한 방법을 선택하여 사용하면 됩니다!

 

끝~