브리프유 브리프유 로그인
자청의 유튜브 추출기

유튜브 영상의 자막과 AI요약을 추출해보세요

AI 채팅

BETA

[판다스] 🚨1타 2피! concat & merge로 데이터 병합 마스터하기 (SQL JOIN 개념까지)

게시일: 작성자: 자청의 유튜브 추출기

판다스 데이터 프레임, 이제 마스터할 시간! (컨캣 & 머지)

이번 시간까지만 집중하면 판다스로 데이터 프레임을 다루는 건 거의 끝이야! 오늘은 여러 데이터 프레임을 합치는 컨캣(concat)이랑 머지(merge)에 대해 알아볼 건데, 이건 마치 SQL의 '조인'이랑 비슷한 개념이라고 생각하면 돼.

1. 컨캣 (concat): 그냥 쭉쭉 붙여보자!

컨캣은 데이터 프레임을 세로(행)나 가로(열) 방향으로 그냥 쭉 붙일 때 써.

예시 데이터 만들기:

import pandas as pd

# 학생 1 정보
student1 = pd.DataFrame({'학번': [101, 102, 103],
                         '이름': ['철수', '영희', '민수']})

# 학생 2 정보
student2 = pd.DataFrame({'학번': [104, 105],
                         '이름': ['지혜', '준호']})

# 점수 정보
score = pd.DataFrame({'학번': [101, 102, 103, 104, 105],
                      '국어': [80, 90, 70, 85, 95],
                      '영어': [75, 85, 80, 90, 70],
                      '수학': [90, 75, 85, 80, 90]})

print("student1:\n", student1)
print("\nstudent2:\n", student2)
print("\nscore:\n", score)

세로로 붙이기 (행 방향):

student1이랑 student2를 세로로 합치고 싶으면 pd.concat()을 쓰면 돼.

student_all = pd.concat([student1, student2])
print("\n세로로 합친 student_all:\n", student_all)

주의! 인덱스 꼬임 방지:

이렇게 그냥 붙이면 인덱스가 겹칠 수 있어. 이걸 방지하려면 ignore_index=True 옵션을 써주면 돼.

student_all_reset = pd.concat([student1, student2], ignore_index=True)
print("\n인덱스 초기화 후 세로로 합친 student_all_reset:\n", student_all_reset)

가로로 붙이기 (열 방향):

이제 student_all_reset에 score 정보를 가로로 붙여보자. 이때는 axis=1 옵션을 써야 해.

# 가로로 붙이기 전에 인덱스를 맞춰주는 게 좋아
student_all_reset = student_all_reset.reset_index(drop=True)
score = score.reset_index(drop=True)

# 가로로 붙이기
merged_data_col = pd.concat([student_all_reset, score], axis=1)
print("\n가로로 합친 merged_data_col:\n", merged_data_col)
  • axis=0 (기본값): 세로로 붙여 (행 추가)
  • axis=1: 가로로 붙여 (열 추가)

2. 머지 (merge): 키를 맞춰서 똑똑하게 합치자!

머지는 SQL의 '조인'처럼, 공통된 컬럼(키)을 기준으로 데이터 프레임을 합칠 때 써. 마치 두 개의 명부를 보고 같은 사람끼리 정보를 합치는 거라고 생각하면 돼.

머지의 다양한 방식 (조인 방식):

머지할 때는 어떤 기준으로 합칠지 정할 수 있어.

  • inner (교집합): 두 데이터 프레임에 모두 있는 키만 합쳐.
  • outer (합집합): 두 데이터 프레임에 있는 모든 키를 합쳐. 없는 건 NaN으로 표시돼.
  • left (왼쪽 기준): 왼쪽 데이터 프레임의 모든 키를 기준으로 합치고, 오른쪽에서 일치하는 것만 가져와.
  • right (오른쪽 기준): 오른쪽 데이터 프레임의 모든 키를 기준으로 합치고, 왼쪽에서 일치하는 것만 가져와.

예시: student_all_reset과 score를 '학번'을 기준으로 합쳐보자.

# 기본적으로 inner 조인으로 합쳐짐
merged_inner = pd.merge(student_all_reset, score, on='학번', how='inner')
print("\n머지 (inner 조인):\n", merged_inner)

# 모든 데이터를 합치기 (outer 조인)
merged_outer = pd.merge(student_all_reset, score, on='학번', how='outer')
print("\n머지 (outer 조인):\n", merged_outer)

# 왼쪽 기준 (student_all_reset 기준)
merged_left = pd.merge(student_all_reset, score, on='학번', how='left')
print("\n머지 (left 조인):\n", merged_left)

# 오른쪽 기준 (score 기준)
merged_right = pd.merge(student_all_reset, score, on='학번', how='right')
print("\n머지 (right 조인):\n", merged_right)

컬럼 이름이 다를 때:

만약 합치려는 컬럼 이름이 다르면, left_on이랑 right_on 옵션을 써서 각각 지정해줘야 해.

# 컬럼 이름이 다른 예시 데이터 생성
student_address = pd.DataFrame({'student_id': [101, 102, 103, 106, 107],
                                '주소': ['서울', '부산', '대구', '인천', '광주']})

# '학번'과 'student_id'를 기준으로 left 조인
merged_diff_col = pd.merge(student_all_reset, student_address, left_on='학번', right_on='student_id', how='left')
print("\n컬럼 이름이 다를 때 머지 (left 조인):\n", merged_diff_col)

3. 병합 후 정리하기

데이터를 합친 후에는 필요한 정보만 뽑거나, 정렬하는 과정이 필요할 수 있어.

필요한 컬럼만 선택하고 평균 계산하기:

# 필요한 컬럼만 선택
selected_cols = merged_data_col[['이름', '국어', '영어', '수학']]

# 평균 계산
selected_cols['평균'] = selected_cols[['국어', '영어', '수학']].mean(axis=1)
print("\n평균 계산:\n", selected_cols)

정렬하기:

평균을 기준으로 내림차순으로 정렬해볼까? sort_values()를 쓰면 돼.

# 평균을 기준으로 내림차순 정렬
sorted_data = selected_cols.sort_values(by='평균', ascending=False)
print("\n평균 기준으로 내림차순 정렬:\n", sorted_data)

요약!

  • 컨캣 (concat): 그냥 세로 또는 가로로 쭉쭉 붙일 때!
    • 세로: pd.concat([df1, df2])
    • 가로: pd.concat([df1, df2], axis=1)
    • 인덱스 꼬임 방지: ignore_index=True
  • 머지 (merge): 공통된 키를 기준으로 똑똑하게 합칠 때! (SQL 조인처럼)
    • pd.merge(df1, df2, on='기준컬럼', how='조인방식')
    • 조인 방식: inner, outer, left, right
    • 컬럼 이름 다를 때: left_on='df1컬럼', right_on='df2컬럼'

컨캣이랑 머지는 정말 많이 쓰이니까, 꼭 직접 코드를 짜보고 연습해보는 게 중요해! 이걸로 판다스 데이터 프레임 다루는 건 거의 끝났다고 보면 돼! 수고했어!

최근 검색 기록