포커스 키워드: 원격수집
원격수집으로 모은 로그·크롤링·API 데이터는 보통 여러 테이블(DataFrame)로 쪼개져 들어옵니다. 이때 가장 많이 쓰는 결합 도구가 pandas merge입니다. 핵심은 ① 어떤 키로 붙일지(on / left_on / right_on) ② 어떤 행을 남길지(how) 두 가지입니다.
이 글에서는 원격수집 데이터 파이프라인에서 자주 마주치는 결합 시나리오를 기준으로 pandas merge를 중심에 두고 join, concat과의 차이까지 한 번에 정리합니다.
왜 원격수집 데이터에 merge가 중요할까요?
원격수집 결과는 다음처럼 서로 다른 키로 연결되는 경우가 많습니다.
- 이벤트 로그(visit_id, user_id) ↔ 사용자 프로필(user_id)
- 상품 리스트(product_id) ↔ 가격 이력(product_id, date)
- 크롤링 결과(url) ↔ 정규화된 canonical(url_canonical)
이때 merge 키가 애매하거나 중복되면 행이 늘어나거나(의도치 않은 카테시안 증가), 값이 누락되거나(조인 방식 문제), 컬럼이 꼬입니다. 그래서 merge는 단순 문법이 아니라 데이터 품질을 지키는 기본기입니다.
pandas merge 기본 (on/left_on/right_on, how)
1) 가장 기본 형태
df = left.merge(right, on="key", how="inner")
- on: 양쪽 DataFrame에 동일한 컬럼명이 있을 때
- how: 어떤 행을 남길지 결정 (
inner,left,right,outer)
2) 키 컬럼명이 다를 때 (left_on/right_on)
df = left.merge(right, left_on="user_id", right_on="id", how="left")
3) how 옵션을 1줄로 이해하기
- inner: 양쪽 모두에 존재하는 키만
- left: 왼쪽 기준으로 모두 유지(원격수집 결과를 보존할 때 자주 사용)
- right: 오른쪽 기준으로 모두 유지
- outer: 양쪽 키 전체 유지(누락 탐지에 유용)
merge vs join vs concat 차이
- merge: 컬럼(키) 기준으로 SQL JOIN처럼 결합(가장 범용)
- join: 보통 인덱스 기준 결합에 강점(인덱스를 키로 관리할 때 편리)
- concat: 위·아래로 붙이거나(axis) 여러 객체를 단순 연결(스키마가 같은 로그 누적에 유용)
원격수집 데이터는 날짜별/페이지별로 쌓이는 로그가 많아서 concat으로 누적한 뒤, 기준 테이블(사용자/상품/카테고리 등)과 merge로 풍부화(enrichment)하는 흐름이 흔합니다.
실전 예제 4개 (원격수집 시나리오)
예제 1) 원격수집 로그에 사용자 속성 붙이기 (left join)
# logs: visit_id, user_id, url, ts
# users: user_id, plan, country
logs_enriched = logs.merge(users, on="user_id", how="left")
원격수집 로그를 최대한 보존하려면 how=”left”가 기본입니다. 사용자 테이블이 일부 비어 있어도 로그가 사라지지 않습니다.
예제 2) 컬럼명이 다른 키를 매칭하기
# api_result: itemId, metric
# catalog: product_id, name
merged = api_result.merge(catalog, left_on="itemId", right_on="product_id", how="left")
예제 3) 키 중복으로 행이 폭증하는 문제 점검
원격수집 데이터에서 가장 흔한 함정이 키 중복입니다. 오른쪽 테이블에서 키가 중복이면 merge 결과가 의도보다 커집니다.
# 중복 키 탐지(예시)
# right[right["key"].duplicated(keep=False)]
# 필요하면 right를 사전에 집계하거나 중복 제거 후 merge
예제 4) outer join으로 누락 원인 찾기
audit = left.merge(right, on="key", how="outer", indicator=True)
indicator를 쓰면 어떤 행이 한쪽에만 있었는지 추적하기 쉬워 원격수집 누락(404, 차단, rate limit 등) 분석에 도움이 됩니다.
자주 겪는 오류와 빠른 체크리스트
- 키 dtype 불일치: 한쪽은 숫자, 한쪽은 문자열이면 매칭이 깨집니다. merge 전 dtype을 맞추세요.
- 키 중복: 오른쪽 테이블의 키 중복은 결과 행 폭증의 1순위 원인입니다.
- 컬럼명 충돌: 같은 이름의 비키 컬럼이 있으면 접미사(
suffixes)로 구분하세요. - 의도한 how 확인: 원격수집 로그를 보존해야 하면 대체로
left가 안전합니다.
원격수집 파이프라인에서는 merge 결과의 행 수가 기대와 다르면 바로 원인을 추적해야 합니다. 먼저 키 유일성과 how를 확인하세요.
FAQ
Q1. 원격수집 데이터는 merge가 좋나요, join이 좋나요?
키가 컬럼으로 명확하면 merge가 가장 직관적입니다. 인덱스를 키로 엄격히 관리 중이면 join이 편합니다.
Q2. concat은 언제 쓰나요?
원격수집 로그처럼 동일 스키마가 반복 생성될 때(일자별 파일, 배치별 결과)를 누적하는 용도로 자주 씁니다. 이후 풍부화는 merge로 처리하세요.