데이터 결합의 join과 concat, 행과 열이 늘어나는 이유

페이지 정보

profile_image
작성자 관리자
댓글 0건 조회 33회 작성일 26-09-21 10:07

본문

표 두 개를 합쳤더니 행이 예상보다 늘어나거나 엉뚱한 빈칸이 생기는 경험을 할 수 있습니다. 데이터 결합은 붙인다는 표현만으로 설명하기 어렵습니다.

같은 형태의 기록을 아래로 쌓는지, 공통 기준으로 정보를 찾아 붙이는지에 따라 결과가 달라지기 때문입니다. pandas를 공부하는 개발자를 위해 join 계열의 결합과 concat을 작은 가상 데이터로 비교합니다.

함수 이름을 고르기 전에 결과의 한 행이 무엇을 뜻하는지 정하는 것이 출발점입니다.

데이터 결합의 join과 concat, 행과 열이 늘어나는 이유 관련 설명용 삽화

AI 생성 삽화 · 개념 이해를 위한 AI 연출 이미지이며 실제 시스템 구성도나 측정 결과가 아닙니다.

핵심 정리
concat은 축을 따라 데이터를 이어 붙이고 join 계열은 키나 인덱스의 관계로 정보를 연결합니다. 결합 전후의 행 수뿐 아니라 키 중복과 결과 한 행의 의미까지 확인해야 합니다.


1. 결과의 한 행을 먼저 말로 설명합니다

가상의 주문 자료와 고객 자료를 합친다고 가정하겠습니다. 주문 자료의 한 행이 주문 한 건이고 고객 자료의 한 행이 고객 한 명이라면 결과를 주문 한 건 단위로 유지하고 싶은지 먼저 정합니다.

고객 한 명이 여러 주문을 했다는 사실은 자연스럽지만 같은 고객 번호가 고객 기본 자료에 여러 번 있으면 별도 검토가 필요합니다. 이 차이를 정하지 않은 채 함수부터 실행하면 행 증가가 정상인지 오류인지 판단할 기준이 없습니다.

자료를 받았을 때는 행의 단위, 식별 기준, 한 기준에 여러 행이 허용되는 이유를 메모합니다. 열 이름이 같다는 사실만으로 같은 의미의 데이터라고 가정하지 않는 것도 중요합니다.

고객 번호와 주문자 번호가 정말 같은 체계인지 확인해야 합니다.


2. concat으로 기록을 쌓는 상황을 생각합니다

pandas 공식 API 문서에서 concat은 지정한 축을 따라 객체를 연결하는 함수입니다. 기본 축은 행 방향이며 다른 축의 라벨을 맞추는 방식도 결과에 영향을 줍니다.

가상의 월요일 주문 세 건과 화요일 주문 두 건을 아래로 이어 붙이는 상황을 생각해 봅니다. 두 자료가 같은 형식이고 별도의 제외 처리가 없다면 다섯 건을 보관하는 것이 의도일 수 있습니다.

여기서 확인할 것은 같은 주문을 두 파일에 중복 저장하지 않았는지입니다. 이어 붙이는 동작만으로 업무상 중복 주문이 자동 정리된다고 기대하면 안 됩니다.

가져온 날짜나 원본 파일을 별도 정보로 남겨 두면 이후 특정 행의 출처를 조사하기 쉽습니다.


3. 가로로 붙일 때는 줄 순서만 믿지 않습니다

concat을 열 방향으로 사용하면 화면의 첫 줄끼리 무조건 짝을 이룬다고 오해하기 쉽습니다. pandas에서는 인덱스 라벨의 정렬 관계를 함께 봐야 합니다.

가상의 두 표가 모두 세 행이어도 하나는 고객 순서가 가, 나, 다이고 다른 하나는 다, 가, 나일 수 있습니다. 표시 순서만 보고 그대로 붙이면 의도와 다른 조합이 생길 수 있습니다.

인덱스를 의미 있는 고객 식별자로 사용하는지, 단순한 행 번호로 사용하는지 먼저 확인합니다. 행 번호를 새로 붙이는 조작은 식별 정보의 의미를 바꾸는 일이 될 수 있으므로 편의상 적용하지 않는 것이 좋습니다.

표가 같은 길이라는 관찰은 올바르게 연결되었다는 증거가 아닙니다.


4. 키를 기준으로 연결하면 관계가 결과를 결정합니다

pandas의 merge 안내는 키가 양쪽에 여러 번 있으면 해당 키의 조합이 결과로 만들어질 수 있다고 설명합니다. 가상의 고객 K에 주문 두 행과 쿠폰 세 행이 있다고 해 보겠습니다.

고객 번호만으로 둘을 연결하면 K에 대한 조합은 여섯 행이 됩니다. 주문 수가 두 건이라는 사실이 바뀐 것은 아니지만 결과의 행 단위는 주문과 쿠폰의 조합으로 달라진 것입니다.

이 결과에서 주문 금액을 그대로 합산하면 한 주문이 반복 집계될 수 있습니다. 이를 함수 오류라고 보기 전에 결합 기준이 충분했는지 검토합니다.

원하는 결과가 주문 한 건당 사용한 쿠폰 하나라면 실제로 그 관계를 식별할 추가 정보가 필요한지 찾아야 합니다.


5. 남길 키의 범위와 빠진 기록을 확인합니다

가상의 주문 자료에는 있는 고객 번호가 고객 기본 자료에는 없을 수 있습니다. 이런 기록을 결과에 남길지 제외할지는 분석 목적에 따라 정해야 합니다.

결합 방식을 선택한 뒤에는 결과에서 사라진 주문이 없는지와 연결되지 않은 고객 정보가 얼마나 있는지 확인합니다. 빈칸을 발견했다고 곧바로 기본값으로 채우면 자료가 없었던 이유를 숨길 수 있습니다.

아직 등록되지 않은 고객인지, 번호 표기 형식이 다른지, 추출 시점이 어긋난 것인지 조사할 여지를 남깁니다. 결과 행 수가 예상과 같아도 일부 기록이 빠지고 다른 기록이 중복되면 총수는 우연히 맞을 수 있습니다.

전체 개수와 함께 실제 식별자의 포함 여부를 비교해야 하는 이유입니다.


6. 결합 전후에 작은 검증표를 만듭니다

검증표에는 원본별 행 수, 키의 고유값 수, 중복 키 수, 연결되지 않은 기록 수를 적어 볼 수 있습니다. 가상의 주문 결과를 한 주문당 한 행으로 쓰려면 주문 번호의 중복 여부도 확인합니다.

금액 합계를 사용할 예정이라면 결합 전후의 합계가 의도 없이 늘지 않았는지 비교합니다. 정상적으로 행이 늘어나는 관계라면 그 이유와 이후 집계 단위를 따로 적습니다.

몇 행만 눈으로 훑는 방식은 드문 중복이나 누락을 찾기 어렵습니다. 처음에는 작은 샘플로 관계를 이해하고 전체 자료에는 같은 기준을 계산하는 방식이 좋습니다.

검증 결과를 변환 코드와 함께 보관하면 원본 형식이 바뀌었을 때 조기에 차이를 발견할 수 있습니다.


7. 함수 이름을 업무 질문으로 바꾸어 봅니다

오늘 기록을 어제 기록 아래에 쌓으려는지, 주문마다 고객 속성을 찾으려는지, 두 표의 같은 인덱스에 열을 추가하려는지 문장으로 적습니다. 이 문장이 분명하면 concat과 키 기반 결합 중 무엇이 맞는지 판단하기 쉬워집니다.

반대로 문장에 같은 행끼리 붙인다는 표현만 있다면 무엇을 기준으로 같은지 더 정해야 합니다. 데이터 전처리 문서에는 사용 함수 외에 결과 단위와 허용한 중복 관계를 함께 남깁니다.

코드 리뷰에서도 행이 늘었다는 현상보다 왜 늘어야 하는지 또는 늘면 안 되는지를 설명합니다. 결합을 잘한다는 것은 표를 하나로 만드는 데서 끝나지 않습니다.

결합된 숫자와 기록을 다음 분석에서 믿고 사용할 근거를 마련하는 일까지 포함합니다. 연습할 때는 고객 두 명과 주문 세 건 정도의 작은 자료로 예상 결과를 먼저 손으로 적어 봅니다.

한 고객의 기본 정보를 일부러 두 행으로 만들어 본 다음 어떤 주문이 반복되는지 비교하면 관계가 눈에 들어옵니다. 예상 행 수가 실제 결과와 다르면 중간 결과를 줄여 어느 키에서 조합이 늘어났는지 확인합니다.

전체 자료의 행 수만 출력하면 원인이 보이지 않을 수 있으므로 특정 키의 원본 행과 결과 행을 함께 봅니다. 검증 기준을 만족시키려고 중복 결과를 무작정 삭제하지 않는 것도 중요합니다.

서로 다른 쿠폰이나 주문을 구별할 정보가 사라질 수 있기 때문입니다. 어떤 기록을 하나로 볼지 결정하는 업무 규칙을 먼저 확인해야 결합 이후의 정리도 설명할 수 있습니다.


8. 자주 묻는 질문

Q1. concat은 중복 행을 자동으로 없애나요?

이어 붙이는 작업 자체가 업무상 중복을 제거하는 것은 아닙니다. 중복의 기준과 보관할 기록의 선택 규칙을 별도로 정해야 합니다.

Q2. join 후 행 수가 늘면 실패한 건가요?

키가 여러 행과 연결되는 관계라면 정상적으로 늘 수 있습니다. 결과 한 행이 무엇을 뜻하는지와 이후 집계가 반복 계산되지 않는지를 확인합니다.

Q3. 두 표의 행 수가 같으면 가로로 붙여도 되나요?

행 수만 같다는 이유로 올바른 짝이 보장되지는 않습니다. 인덱스와 식별 기준이 같은 대상을 가리키는지 먼저 확인해야 합니다.

Q4. 결합 결과에 빈칸이 생기면 지워도 되나요?

연결되지 않은 이유와 분석 목적에 따라 결정합니다. 곧바로 삭제하면 원본에 있던 중요한 기록이 빠질 수 있으므로 누락 범위를 먼저 계산합니다.


참고 자료

댓글목록

등록된 댓글이 없습니다.