[Pandas 강좌 – 6] Pandas(판다스)를 통한 데이터 병합하기 (Concat, Merge, Join 사용법)

1. pandas.concat() 함수 사용법

 

pandas.concat()은 각기 다른 데이터프레임들을 하나로 합치는 함수입니다. 이 때, 기본적으로는 행 방향으로 합치며 (axis=0), 열 방향으로 합치려면 axis=1을 설정해주면 됩니다. 아래 코드에서 pd.concat([df1, df2])을 통해 df1과 df2를 행 방향으로 합칩니다.

 

 

import pandas as pd

# 예제 데이터프레임 생성
df1 = pd.DataFrame({
    'A': ['A0', 'A1', 'A2', 'A3'],
    'B': ['B0', 'B1', 'B2', 'B3'],
    'C': ['C0', 'C1', 'C2', 'C3'],
    'D': ['D0', 'D1', 'D2', 'D3']
}, index=[0, 1, 2, 3])

df2 = pd.DataFrame({
    'A': ['A4', 'A5', 'A6', 'A7'],
    'B': ['B4', 'B5', 'B6', 'B7'],
    'C': ['C4', 'C5', 'C6', 'C7'],
    'D': ['D4', 'D5', 'D6', 'D7']
}, index=[4, 5, 6, 7])

# pandas.concat() 사용
result = pd.concat([df1, df2])
print(result)

 

 

pd.concat() 함수의 주요 매개 변수들은 다음과 같습니다.

 

  • objs : 이 매개 변수는 합치려는 pandas 데이터프레임들의 리스트를 받습니다.
  • axis : 이 매개 변수는 연결 방향을 지정합니다. 0은 행 방향(기본값), 1은 열 방향입니다.
  • join : 이 매개 변수는 'inner'(두 데이터프레임의 공통 열만 보존)와 'outer'(두 데이터프레임의 모든 열을 보존, 기본값) 중 하나를 선택할 수 있게 합니다.
  • ignore_index : 이 매개 변수가 True로 설정되면, 합친 후의 데이터프레임에서 기존 인덱스는 무시되고 새로운 인덱스가 부여됩니다. 기본값은 False입니다.

 

 

import pandas as pd

# 예제 데이터프레임 생성
df1 = pd.DataFrame({
    'A': ['A0', 'A1', 'A2', 'A3'],
    'B': ['B0', 'B1', 'B2', 'B3'],
    'C': ['C0', 'C1', 'C2', 'C3'],
    'D': ['D0', 'D1', 'D2', 'D3']
}, index=[0, 1, 2, 3])

df2 = pd.DataFrame({
    'A': ['A4', 'A5', 'A6', 'A7'],
    'B': ['B4', 'B5', 'B6', 'B7'],
    'E': ['E4', 'E5', 'E6', 'E7'],
    'F': ['F4', 'F5', 'F6', 'F7']
}, index=[4, 5, 6, 7])

# pandas.concat() 사용 - axis=0, join='outer', ignore_index=False
result = pd.concat([df1, df2])
print(result)

#     A   B    C    D    E    F
# 0  A0  B0   C0   D0  NaN  NaN
# 1  A1  B1   C1   D1  NaN  NaN
# 2  A2  B2   C2   D2  NaN  NaN
# 3  A3  B3   C3   D3  NaN  NaN
# 4  A4  B4  NaN  NaN   E4   F4
# 5  A5  B5  NaN  NaN   E5   F5
# 6  A6  B6  NaN  NaN   E6   F6
# 7  A7  B7  NaN  NaN   E7   F7

# pandas.concat() 사용 - axis=1
result = pd.concat([df1, df2], axis=1)
print(result)


#      A    B    C    D    A    B    E    F
# 0   A0   B0   C0   D0  NaN  NaN  NaN  NaN
# 1   A1   B1   C1   D1  NaN  NaN  NaN  NaN
# 2   A2   B2   C2   D2  NaN  NaN  NaN  NaN
# 3   A3   B3   C3   D3  NaN  NaN  NaN  NaN
# 4  NaN  NaN  NaN  NaN   A4   B4   E4   F4
# 5  NaN  NaN  NaN  NaN   A5   B5   E5   F5
# 6  NaN  NaN  NaN  NaN   A6   B6   E6   F6
# 7  NaN  NaN  NaN  NaN   A7   B7   E7   F7

# pandas.concat() 사용 - join='inner'
result = pd.concat([df1, df2], join='inner')
print(result)


#     A   B
# 0  A0  B0
# 1  A1  B1
# 2  A2  B2
# 3  A3  B3
# 4  A4  B4
# 5  A5  B5
# 6  A6  B6
# 7  A7  B7


# pandas.concat() 사용 - ignore_index=True
result = pd.concat([df1, df2], ignore_index=True)
print(result)


#     A   B    C    D    E    F
# 0  A0  B0   C0   D0  NaN  NaN
# 1  A1  B1   C1   D1  NaN  NaN
# 2  A2  B2   C2   D2  NaN  NaN
# 3  A3  B3   C3   D3  NaN  NaN
# 4  A4  B4  NaN  NaN   E4   F4
# 5  A5  B5  NaN  NaN   E5   F5
# 6  A6  B6  NaN  NaN   E6   F6
# 7  A7  B7  NaN  NaN   E7   F7

 


2. pandas.merge() 함수 사용법

 

pandas.merge()는 두 데이터프레임의 공통 열 혹은 인덱스를 기준으로 두 개의 테이블을 합칩니다. 이 때, on 파라미터를 사용해 기준이 되는 열을 지정할 수 있습니다. 아래 코드에서 pd.merge(df1, df2, on='key')를 통해 key 열을 기준으로 df1과 df2를 합칩니다.

 

 

# 예제 데이터프레임 생성
df1 = pd.DataFrame({
    'key': ['A', 'B', 'C', 'D'],
    'value': range(4)
})

df2 = pd.DataFrame({
    'key': ['B', 'D', 'D', 'E'],
    'value': range(4, 8)
})

# pandas.merge() 사용
merged = pd.merge(df1, df2, on='key')
print(merged)

 

 

pandas.merge() 함수의 주요 매개 변수들은 다음과 같습니다.

 

  • left, right : 이 매개 변수들은 병합하려는 두 데이터프레임을 나타냅니다.
  • on : 이 매개 변수는 병합의 기준이 되는 열의 이름을 나타냅니다.
  • how : 이 매개 변수는 병합 방식을 나타냅니다. 기본값은 'inner'이며, 'outer', 'left', 'right'를 선택할 수 있습니다.
  • suffixes : 이 매개 변수는 중복된 열 이름에 대해 접미사를 추가합니다. 기본값은 ('_x', '_y')입니다.

 

 

import pandas as pd

# 예제 데이터프레임 생성
df1 = pd.DataFrame({
    'key': ['A', 'B', 'C', 'D'],
    'value': range(4)
})

df2 = pd.DataFrame({
    'key': ['B', 'D', 'D', 'E'],
    'value': range(4, 8)
})

# pandas.merge() 사용
merged = pd.merge(df1, df2, on='key')
print(merged)


#   key  value_x  value_y
# 0   B        1        4
# 1   D        3        5
# 2   D        3        6

# pandas.merge() 사용 - how='outer'
merged = pd.merge(df1, df2, on='key', how='outer')
print(merged)


#   key  value_x  value_y
# 0   A      0.0      NaN
# 1   B      1.0      4.0
# 2   C      2.0      NaN
# 3   D      3.0      5.0
# 4   D      3.0      6.0
# 5   E      NaN      7.0


# pandas.merge() 사용 - how='left'
merged = pd.merge(df1, df2, on='key', how='left')
print(merged)

#   key  value_x  value_y
# 0   A        0      NaN
# 1   B        1      4.0
# 2   C        2      NaN
# 3   D        3      5.0
# 4   D        3      6.0


# pandas.merge() 사용 - suffixes
merged = pd.merge(df1, df2, on='key', suffixes=('_left', '_right'))
print(merged)

#   key  value_left  value_right
# 0   B           1            4
# 1   D           3            5
# 2   D           3            6

 


3. pandas.DataFrame.join() 함수 사용법

 

join() 메서드는 두 데이터프레임의 인덱스를 기준으로 합치는 방법입니다. merge()와 달리 기본적으로 인덱스를 사용하며, on 파라미터를 통해 다른 열을 기준으로 합칠 수 있습니다. 아래 코드에서 df1.join(df2)를 통해 df1과 df2의 인덱스를 기준으로 데이터프레임을 합칩니다. join() 메서드 역시 how 파라미터를 통해 join 방식을 선택할 수 있습니다.

 

 

# 예제 데이터프레임 생성
df1 = pd.DataFrame({
    'A': ['A0', 'A1', 'A2'],
    'B': ['B0', 'B1', 'B2']
}, index=['K0', 'K1', 'K2'])

df2 = pd.DataFrame({
    'C': ['C0', 'C2', 'C3'],
    'D': ['D0', 'D2', 'D3']
}, index=['K0', 'K2', 'K3'])

# pandas.DataFrame.join() 사용
joined = df1.join(df2)
print(joined)

 

 

pandas.DataFrame.join() 함수의 주요 매개 변수들은 다음과 같습니다.

 

  • other : 이 매개 변수는 조인하려는 다른 데이터프레임을 나타냅니다.
  • on : 이 매개 변수는 호출 데이터프레임의 열 또는 인덱스를 기준으로 결합합니다. other의 인덱스와 일치해야 합니다.
  • how : 이 매개 변수는 조인 방식을 나타냅니다. 기본값은 'left'이며, 'outer', 'inner', 'right'를 선택할 수 있습니다.
  • lsuffix, rsuffix: 이 매개 변수들은 중복된 열 이름에 대해 접미사를 추가합니다.

 

 

import pandas as pd

# 예제 데이터프레임 생성
df1 = pd.DataFrame({
    'A': ['A0', 'A1', 'A2'],
    'B': ['B0', 'B1', 'B2']
}, index=['K0', 'K1', 'K2'])

df2 = pd.DataFrame({
    'C': ['C0', 'C2', 'C3'],
    'D': ['D0', 'D2', 'D3']
}, index=['K0', 'K2', 'K3'])

# DataFrame.join() 사용
joined = df1.join(df2)
print(joined)


#      A   B    C    D
# K0  A0  B0   C0   D0
# K1  A1  B1  NaN  NaN
# K2  A2  B2   C2   D2


# DataFrame.join() 사용 - how='outer'
joined = df1.join(df2, how='outer')
print(joined)

#       A    B    C    D
# K0   A0   B0   C0   D0
# K1   A1   B1  NaN  NaN
# K2   A2   B2   C2   D2
# K3  NaN  NaN   C3   D3


df3 = pd.DataFrame({
    'A': ['A3', 'A4', 'A5'],
    'B': ['B3', 'B4', 'B5']
}, index=['K0', 'K1', 'K2'])

# DataFrame.join() 사용 - lsuffix, rsuffix
joined = df1.join(df3, lsuffix='_df1', rsuffix='_df3')
print(joined)


#    A_df1 B_df1 A_df3 B_df3
# K0    A0    B0    A3    B3
# K1    A1    B1    A4    B4
# K2    A2    B2    A5    B5