🐼 Pandas로 시작하는 데이터 분석 – 데이터 읽기, 결합, 병합 기초편
이번 포스팅에서는 pandas를 활용해 CSV 파일 읽기부터 데이터 결합, 병합(Merge) 까지의 기초적인 흐름을 다뤄봅니다.
초보자도 따라 할 수 있도록 실제 예제와 함께 단계별로 구성했습니다.
1️⃣ 데이터 읽기
가장 먼저 해야 할 일은 데이터를 pandas의 read_csv() 함수를 이용해 불러오는 것입니다.
import pandas as pd
# 고객 마스터 정보
master_read = pd.read_csv('1장\\customer_master.csv')
# 거래 데이터 1, 2
trans1 = pd.read_csv('1장\\transaction_1.csv')
trans2 = pd.read_csv('1장\\transaction_2.csv')
# 거래 상세 정보
detail = pd.read_csv('1장/transaction_detail_1.csv')
✅ read_csv() 함수는 CSV 파일을 DataFrame으로 불러오는 pandas의 기본 함수입니다.
슬래시 방향에 유의하세요: Windows는 \\, Mac/Linux는 / 또는 r'경로'로 적으면 편합니다.
2️⃣ 데이터 결합 – concat() (세로 방향)
concat() 함수는 여러 개의 DataFrame을 세로로 이어붙일 때 사용합니다.
이럴 때는 기본값인 axis=0을 사용하고, 인덱스를 새로 부여하려면 ignore_index=True를 함께 씁니다.
# 거래 데이터를 하나로 합치기
all_trans = pd.concat([trans1, trans2], ignore_index=True)
print(all_trans.head())
📌 출력 결과:
transaction_id price payment_date customer_id
0 T0000000113 210000 2019-02-01 01:36:57 PL563502
1 T0000000114 50000 2019-02-01 01:37:23 HD678019
...
✅ concat()은 SQL의 UNION ALL과 유사하며, 단순히 데이터를 위아래로 붙이는 데 사용됩니다.
3️⃣ 데이터 결합 – concat(axis=1) (가로 방향)
열(column)을 기준으로 옆으로 결합할 수도 있습니다.
# 예시: trans1과 trans2를 가로로 결합 (데이터 수가 같을 경우에만 의미 있음)
pd.concat([trans1, trans2], axis=1)
🔸 axis=1은 옆으로 붙이기, axis=0은 아래로 붙이기라는 뜻입니다.
4️⃣ 데이터 병합 – merge() 사용하기
merge()는 SQL의 JOIN처럼 공통된 key를 기준으로 데이터를 병합합니다.
예를 들어, 거래 상세 데이터와 거래 데이터를 병합할 수 있습니다.
# 거래 상세(detail) + 거래일자 정보(payment_date) 병합
join_data = pd.merge(detail,
trans1[["transaction_id", "payment_date"]],
on="transaction_id",
how="left")
print(join_data)
📌 출력 결과:
detail_id transaction_id item_id quantity payment_date
0 0 T0000000113 S005 1 2019-02-01 01:36:57
1 1 T0000000114 S001 1 2019-02-01 01:37:23
2 2 T0000000115 S003 1 2019-02-01 02:34:19
3 3 T0000000116 S005 1 2019-02-01 02:47:23
4 4 T0000000117 S002 2 2019-02-01 04:33:46
✅ on="transaction_id": 병합 기준 열
✅ how="left": 왼쪽(detail) 기준으로 데이터 유지
🔍 concat() vs merge() 차이점
| 목적 | 단순 연결 (세로 또는 가로) | 키(key)를 기준으로 병합 |
| 열 구조가 다르면 | NaN으로 채움 | 조인 조건 따라 다름 |
| SQL 유사성 | UNION, UNION ALL | JOIN (INNER, LEFT, OUTER...) |
5️⃣ 참고: 예제 파일 구성
📁 transaction_1.csv 구조
transaction_id,price,payment_date,customer_id
T0000000113,210000,2019-02-01 01:36:57,PL563502
T0000000114,50000,2019-02-01 01:37:23,HD678019
...
📁 transaction_detail_1.csv 구조
detail_id,transaction_id,item_id,quantity
0,T0000000113,S005,1
1,T0000000114,S001,1
2,T0000000115,S003,1
...
🔁 복합 키(여러 개의 열)를 기준으로 병합하기
만약 transaction_id 외에 item_id까지 함께 일치시켜 병합하고 싶다면 아래처럼 리스트로 기준 열을 넘겨주면 됩니다.
pd.merge(df1, df2, on=["transaction_id", "item_id"], how="inner")
🔁 병합 기준 열 이름이 서로 다를 때
열 이름이 서로 다른 경우에는 left_on, right_on을 이용합니다.
pd.merge(df1, df2, left_on=["tx_id", "item_code"],
right_on=["transaction_id", "item_id"],
how="left")
6️⃣ 데이터 추가하기 – 계산 열 추가로 확장하기
이전 단계에서 transaction_detail 데이터와 transaction_1 데이터를 병합해 payment_date, price 정보를 가져왔습니다.
이제 여기에 총 결제 금액(quantity × price)을 계산해서 새로운 열로 추가해보겠습니다.
✅ 전체 코드
import pandas as pd
master_read=pd.read_csv('1장\customer_master.csv')
trans1 = pd.read_csv(r'1장\transaction_1.csv')
trans2 = pd.read_csv(r'1장\transaction_2.csv')
detail=pd.read_csv(r'1장/transaction_detail_1.csv')
join_data=pd.merge(detail,trans1[["transaction_id","payment_date","price"]],on="transaction_id",how="left")
print(join_data.head())
join_data["total_price"]=join_data["quantity"]*join_data["price"]
print(join_data.head())
📌 출력 결과 예시
detail_id transaction_id item_id quantity payment_date price total_price
0 0 T0000000113 S005 1 2019-02-01 01:36:57 210000 210000
1 1 T0000000114 S001 1 2019-02-01 01:37:23 50000 50000
2 2 T0000000115 S003 1 2019-02-01 02:34:19 120000 120000
3 3 T0000000116 S005 1 2019-02-01 02:47:23 210000 210000
4 4 T0000000117 S002 2 2019-02-01 04:33:46 170000 340000
'인공지능' 카테고리의 다른 글
| 데이터 전처리 및 집계 분석 (0) | 2025.07.01 |
|---|---|
| 데이터 정리 후 출력 (0) | 2025.07.01 |
| 데이터 정리하기 (1) | 2025.06.30 |
| 데이터 가시화 (1) | 2025.06.29 |
| 데이터 분석을 위한 파이썬2 (0) | 2025.06.29 |