본문 바로가기

Data & MarTech

Pandas를 이용해 데이터를 Merge하는 방법과 로깅 활용하기

반응형

Pandas를 이용해 데이터를 Merge하는 방법과 로깅 활용하기

Pandas는 Python의 강력한 데이터 처리 라이브러리로, 다양한 데이터를 쉽고 빠르게 처리할 수 있도록 도와줍니다. 이번 글에서는 여러 CSV 파일을 하나로 병합하고, 이를 로깅을 통해 기록하는 방법을 소개하겠습니다.

준비물

  • Python
  • Pandas 라이브러리
  • CSV 파일

코드 설명

필요한 라이브러리 임포트

import pandas as pd
import logging
import os

pandas는 데이터 처리를 위해, logging은 로깅을 위해, os는 파일 존재 여부 확인을 위해 사용합니다.

CSV 파일 리스트 준비

csv_files = ['./origin/sample_historical_install.csv','./origin/sample_historical_install_2.csv','./origin/sample_historical_install_3.csv']

여러 CSV 파일을 하나의 리스트에 저장합니다. 이 리스트에 포함된 모든 파일을 병합할 것입니다.

로깅 설정

logging.basicConfig(level=logging.INFO, filename="py_log.log", filemode="w",
                    format="%(asctime)s %(levelname)s %(message)s")

로깅을 설정하여 로그 메시지를 파일에 기록하도록 합니다. level=logging.INFO는 정보 수준 이상의 로그만 기록하겠다는 의미입니다.

데이터프레임 리스트 생성 및 CSV 파일 읽기

dfs = []

try:
    for i, file in enumerate(csv_files):
        if os.path.exists(file):
            df = pd.read_csv(file)
            dfs.append(df)
            logging.info(f"Successfully appended DataFrame from {file}")
        else:
            logging.error(f"File not found: {file}")

여기서는 csv_files 리스트에 있는 각 파일을 읽어 데이터프레임으로 변환한 후, dfs 리스트에 추가합니다. 각 파일을 성공적으로 읽었는지 로그에 기록합니다. 파일이 존재하지 않을 경우, 에러 로그를 남깁니다.

데이터프레임 병합

    if dfs:
        merged_df = pd.concat(dfs, axis=0, ignore_index=True)
        output_path = './origin/merged_sample_install.csv'
        merged_df.to_csv(output_path, index=False)

        if os.path.exists(output_path):
            logging.info("Successfully merged and saved DataFrame")
    else:
        logging.warning("No DataFrames to merge")
except Exception as e:
    logging.error(f"An error occurred: {e}")

모든 데이터프레임을 하나로 병합한 후, 새로운 CSV 파일로 저장합니다. 병합된 파일이 성공적으로 생성되었는지 확인하고, 최종 로그를 기록합니다. FileNotFoundError 외에 다른 예외 상황도 처리하여 더욱 안정적인 코드를 만들었습니다.

Pandas concat 함수 설명

pd.concat() 함수는 여러 데이터프레임을 하나로 합칠 때 사용합니다. 이 함수는 다양한 옵션을 제공하며, 데이터 병합을 매우 유연하게 처리할 수 있습니다.

  • axis=0: 행을 따라 데이터프레임을 병합합니다. 즉, 데이터프레임들이 위아래로 쌓이게 됩니다. 반대로 axis=1이면 열을 따라 병합되어, 데이터프레임들이 좌우로 병합됩니다.
  • ignore_index=True: 병합된 데이터프레임의 인덱스를 재설정합니다. 원본 데이터프레임의 인덱스를 무시하고, 병합된 새로운 데이터프레임에 대해 0부터 시작하는 새로운 인덱스를 생성합니다.

전체 코드

import pandas as pd
import logging
import os

csv_files = ['./origin/sample_historical_install.csv','./origin/sample_historical_install_2.csv','./origin/sample_historical_install_3.csv']

dfs = []

logging.basicConfig(level=logging.INFO, filename="py_log.log", filemode="w",
                    format="%(asctime)s %(levelname)s %(message)s")

try:
    for i, file in enumerate(csv_files):
        if os.path.exists(file):
            df = pd.read_csv(file)
            dfs.append(df)
            logging.info(f"Successfully appended DataFrame from {file}")
        else:
            logging.error(f"File not found: {file}")

    if dfs:
        merged_df = pd.concat(dfs, axis=0, ignore_index=True)
        output_path = './origin/merged_sample_install.csv'
        merged_df.to_csv(output_path, index=False)

        if os.path.exists(output_path):
            logging.info("Successfully merged and saved DataFrame")
    else:
        logging.warning("No DataFrames to merge")
except Exception as e:
    logging.error(f"An error occurred: {e}")

마무리

이 글에서는 Pandas를 사용하여 여러 CSV 파일을 병합하고, 로깅을 통해 프로세스를 기록하는 방법을 배웠습니다. pd.concat() 함수를 활용하여 여러 데이터셋을 행을 따라 데이터프레임을 병합하고, 인덱스를 재설정할 수 있습니다. 또한 로깅을 통해 코드의 실행 과정을 기록하면 디버깅과 유지 보수가 훨씬 쉬워집니다. 이 코드를 바탕으로 다양한 데이터를 효과적으로 처리해보세요!

참고자료

Logging in Python: A Developer’s Guide

 

 

Logging in Python: A Developer’s Guide

Have you ever had a tough time debugging your Python code? If yes, learning how to set up logging in Python can help you streamline your…

blog.sentry.io

 

반응형