Python/데이터 전처리

데이터프레임 합치기(판다스/Pandas)

강떡볶 2022. 4. 7. 22:47
3가지 방법
# 데이터프레임 만들기

df1 = pd.DataFrame({'a' : ['a0', 'a1', 'a2'],
                   'b' : ['b0', 'b1', 'b2'],
                   'c' : ['c0', 'c1', 'c2']},
                  index = [0,1,2])
df2 = pd.DataFrame({'a' : ['a0', 'a1', 'a2'],
                   'b' : ['b0', 'b1', 'b2'],
                   'c' : ['c0', 'c1', 'c2'],
                   'd' : ['d0', 'd1', 'd2']},
                  index = [1,2,3])

print(df1)
print('\n')
print(df2)

 

 

1) 연결(concat)

result1 = pd.concat([df1, df2])
result1

  • 데이터프레임을 행 방향으로 위 아래로 연결
  • 축 방향을 지정하지 않으면 디폴트 값이 행 방향
  • 행 인덱스는 본래 형태를 유지

 

result2 = pd.concat([df1, df2], ignore_index = True)
result2

  • ignore_index=True 옵션을 사용
  • 기존 행 인덱스 무시하고 새로운 행 인덱스 설정

 

result3 = pd.concat([df1, df2], axis = 1)
result3

  • axis=1 옵션으로 좌우 열 방향으로 연결
  • joing='outer'은 디폴트 값으로 행 인덱스 합집합으로 구성

 

result3_in = pd.concat([df1, df2], axis = 1, join = 'inner')
result3_in

  • axis=1 옵션으로 좌우 열 방향으로 연결
  • join='inner'은 행 인덱스 교집합을 기준
axis=0 은 '열', axis=1 은 '행'

 

 

2) 병합(merge)

merge_inner = pd.merge(df1, df2)
merge_inner
  • merage() 함수 기본 값: on=None, how='inner'
  • on=None 옵션: 공통으로 속하는 모든 열을 기준으로 병합
  • how='inner' 옵션(교집합) : 기준이 되는 열의 데이터가 공통으로 존재하는 교집합일 경우에만 추출

 

merge_outer = pd.merge(df1, df2, how = 'outer', on = 'c')
merge_outer

  • on='c' 옵션 : 공통 열 중에서 'c'열을 키로 병합
  • how='outer' 옵션(합집합) : 기준이 되는 'c'열의 데이터가 한 쪽에만 속하더라도 포함

 

merge_left = pd.merge(df1, df2, how = 'left', on = 'c')
merge_outer

  • how='left' 옵션 : 왼쪽 데이터프레임 키열에 속하는 데이터 값을 기준으로 병합

 

 

3) 결합(join)

# 데이터프레임 만들기
df1 = pd.DataFrame({'a' : ['a0', 'a1', 'a2'],
                   'b' : ['b0', 'b1', 'b2'],
                   'c' : ['c0', 'c1', 'c2']},
                  index = [0,1,2])
df2 = pd.DataFrame({'e' : ['e0', 'e1', 'e2'],
                   'f' : ['e0', 'e1', 'e2'],
                   'g' : ['g0', 'g1', 'g2'],
                   'h' : ['h0', 'h1', 'h2']},
                  index = [1,2,3])
df3 = df1.join(df2)
df3

  • merge() 함수랑 비슷
  • 행 인덱스를 기준으로 결합한다는 점에서 다름