CodeGym /행동 /Python SELF KO /여러 시트와 Excel 파일의 데이터 병합

여러 시트와 Excel 파일의 데이터 병합

Python SELF KO
레벨 28 , 레슨 1
사용 가능

1. 왜 데이터를 병합해야 할까?

현대 데이터 세상에서는 필요한 모든 정보를 하나의 파일에서 찾는 일이 드물어. 보통 데이터는 여러 테이블과 파일에 흩어져 있고, 제대로 분석하려면 이를 병합해야 해. 예를 들어, 각 월별 판매 데이터를 개별 파일로 가지고 있다고 하자. 전체적인 트렌드를 분석하려면 이 데이터를 하나의 테이블에 병합해야 해.

게다가, 데이터 병합은 다음과 같은 이점이 있어:

  • 보고서를 수동으로 작성하는 데 드는 시간을 절약할 수 있어.
  • 수동 데이터 전송과 관련된 실수를 줄일 수 있어.
  • 데이터 분석 작업의 워크플로를 자동화할 수 있어.

2. 데이터 병합 방법

데이터 연결(Concatenation)

데이터를 세로로 또는 가로로 병합하는 걸 연결(Concatenation)이라고 불러. 간단한 예제로 시작해 보자: 우리가 병합하고 싶은 두 개의 DataFrame이 있다고 하자.

Python

import pandas as pd

# 유사한 구조의 두 DataFrame 생성
data1 = {
    'Product': ['Apples', 'Bananas'],
    'Sales': [100, 150]
}

data2 = {
    'Product': ['Cherries', 'Dates'],
    'Sales': [75, 200]
}

df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)

# 세로로 데이터 연결 (행 추가)
combined = pd.concat([df1, df2], ignore_index=True)
print(combined)

결과적으로 두 소스의 모든 행이 있는 결합된 DataFrame을 얻게 돼. ignore_index=True 파라미터는 최종 DataFrame에서 인덱스를 재설정하는 데 사용돼.

merge 메소드로 데이터 병합

공통 열(예: id 또는 Product)을 기준으로 데이터를 병합해야 할 때 merge 메소드가 유용해. 데이터를 데이트한다고 생각하면 돼 — 공통된 무언가가 있어야 데이트를 할 수 있겠지!

Python

# 데이터 예제 생성
sales_data = {
    'Product': ['Apples', 'Bananas', 'Cherries'],
    'Sales': [100, 150, 75]
}

price_data = {
    'Product': ['Apples', 'Bananas', 'Dates'],
    'Price': [1.2, 0.8, 3.0]
}

sales_df = pd.DataFrame(sales_data)
price_df = pd.DataFrame(price_data)

# 'Product' 컬럼 기준으로 DataFrame 병합
merged_df = pd.merge(sales_df, price_df, on='Product', how='inner')
print(merged_df)

모든 제품 정보를 가지고 있음에도 불구하고, merge는 키 열 Product에서 일치하는 행만 반환해.

병합 유형을 살펴보자:

  • inner (기본값): 두 DataFrame에 모두 존재하는 행만 반환.
  • outer: 모든 행을 반환하고 누락된 값은 NaN으로 채움.
  • left: 왼쪽 DataFrame의 모든 행과 오른쪽에서 일치하는 행을 반환.
  • right: 오른쪽 DataFrame의 모든 행과 왼쪽에서 일치하는 행을 반환.

여러 시트에서 데이터 병합

이제 pandas에서 병합이 어떻게 작동하는지 기억을 되살렸으니, 이를 실제로 적용하여 하나의 Excel 파일의 여러 시트 데이터를 병합하자.

Python

# 여러 시트가 포함된 Excel 파일 읽기
excel_file = pd.ExcelFile('sales_data.xlsx')

# 모든 시트 이름 목록
sheet_names = excel_file.sheet_names

# 각 시트에서 데이터를 개별 DataFrame으로 읽고 이를 목록에 저장
dataframes = [pd.read_excel(excel_file, sheet_name=sheet_name) for sheet_name in sheet_names]

# 모든 DataFrame을 세로로 연결
all_sales_data = pd.concat(dataframes, ignore_index=True)

print(all_sales_data)

여기서는 Excel 파일의 모든 시트를 개별 DataFrame에 읽고, 그런 다음 하나의 데이터로 결합해. 강력하지 않아?

여러 파일의 데이터 병합

실제로 데이터를 여러 파일에 분산시켜 놓는 경우와 마주칠 수 있어. 이를 병합하는 과정을 자동화하는 방법을 살펴보자.

Python

import glob

# 파일 경로
file_path = r'data/sales_*.xlsx'

# 지정된 패턴에 맞는 모든 파일 목록 가져오기
files = glob.glob(file_path)

# 각 파일에서 데이터를 개별 DataFrame으로 읽고 이를 목록에 저장
dataframes = [pd.read_excel(file) for file in files]

# 모든 DataFrame을 세로로 연결
all_files_data = pd.concat(dataframes, ignore_index=True)

print(all_files_data)

여기서는 glob 라이브러리를 사용하여 지정된 패턴에 맞는 파일 목록을 가져오고, 각 파일의 데이터를 하나의 DataFrame으로 결합해.

3. 실제 사용 예

비즈니스 분석을 위한 데이터 병합

예를 들어, 매월 별도로 파일로 제공되는 판매 데이터를 다루는 분석가라고 하자. 위에서 설명한 기술을 사용하면 연간 트렌드를 분석하고 관련 결론을 쉽게 도출할 수 있어.

보고서 자동화

데이터 병합 자동화를 통해 다양한 소스에서 정보를 수집하고 이를 기반으로 일일, 주간, 월간 보고서를 자동으로 생성하는 스크립트를 설정할 수 있어.

다양한 소스의 데이터 처리

다양한 시스템에서 각각 일부 정보를 제공하며, 데이터가 여러 소스로부터 올 수 있어. pandas를 사용하여 이 데이터를 하나로 통합하여, 고객과 구매 데이터를 결합하는 것처럼 전체 그림을 얻을 수 있어.

4. 일반적인 오류와 해결방법

흔한 오류 중 하나는 병합하려는 DataFrame에서 열 이름이 일치하지 않는 경우야. 데이터를 병합하는 열이 실제로 동일한지 확인하고 필요에 따라 merge 메소드의 left_onright_on 파라미터를 사용해.

가끔 데이터 병합 후 누락된 값이 포함될 수도 있어. fillna 메소드를 사용해 값을 채우거나 dropna 메소드를 사용해 누락된 데이터를 제거해.

데이터에 중복 값이 있는 경우 concat 메소드는 예상보다 더 긴 DataFrame을 생성할 수 있어. 이 경우 drop_duplicates 메소드를 사용해 데이터를 정리해.

이제 pandas에서 데이터 병합 방법과 요령을 다뤘으니, 실제 데이터 자동화 및 분석 작업을 처리할 수 있는 도구를 갖추게 됐어. 이 지식을 유용하게 활용해 봐!

코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION