인공지능

데이터 분석을 위한 파이썬

존카터 2025. 6. 29. 10:23

🐼 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() 차이점

항목concat()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)을 계산해서 새로운 열로 추가해보겠습니다.

 

✅ 전체 코드

python
복사편집
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