[연구 자동화 #5] 반복 작업의 종결자: 수백 개의 실험 파일을 한 번에 통합하고 저장하기

 

우리는 앞서 pd.read_csv()를 통해 파일을 하나 불러오는 방법을 배웠습니다. 하지만 실무에서는 파일이 하나인 경우가 거의 없습니다. 날짜별, 시료별, 혹은 반복 실험 회차별로 나누어진 수십, 수백 개의 파일이 우리를 기다리고 있죠.

이 파일들을 엑셀에서 수작업으로 합치다 보면 꼭 한두 개씩 데이터를 빼먹거나 순서가 뒤바뀌는 휴먼 에러가 발생합니다. 파이썬은 지치지도 않고, 실수도 하지 않습니다. 폴더 안에 있는 모든 파일을 싹 긁어모아 하나의 거대한 데이터셋으로 만드는 '자동화 파이프라인'을 구축해 봅시다.


1. 파일들의 주소를 찾아주는 비서: glob 라이브러리

가장 먼저 필요한 기술은 폴더 안에 어떤 파일들이 있는지 목록을 만드는 것입니다. 이때 사용하는 것이 glob이라는 도구입니다.

  • 원리: glob.glob('data/*.csv')라고 명령하면, 'data'라는 폴더 안에 있는 모든 .csv 파일의 경로를 리스트로 반환합니다.

  • 장점: 파일 이름이 result_01, result_02처럼 규칙적이든 아니든 상관없습니다. 확장자만 맞으면 다 찾아냅니다.


2. 반복문의 마법: for 루프와 리스트 활용

파일 목록을 얻었다면, 이제 파이썬에게 이렇게 시킵니다. "목록에 있는 파일을 하나씩 꺼내서 읽고, 바구니에 담아줘."

많은 초보자가 파일을 읽을 때마다 새 변수를 만들려 하지만(df1, df2...), 세련된 방법은 리스트에 차곡차곡 쌓는 것입니다.

Python
import pandas as pd
import glob

# 1. 파일 목록 가져오기
file_list = glob.glob('experiment_data/*.csv')

# 2. 데이터를 담을 빈 바구니(리스트) 만들기
all_data = []

# 3. 반복해서 파일 읽기
for file in file_list:
    df = pd.read_csv(file)
    all_data.append(df)

이 짧은 코드로 100개든 1000개든 모든 데이터를 파이썬 메모리 안으로 가져왔습니다.


3. 흩어진 조각 합치기: pd.concat

이제 바구니(all_data)에 담긴 여러 개의 데이터프레임을 하나로 합칠 차례입니다. 판다스의 concat 함수는 이 조각들을 위아래로 깔끔하게 이어 붙여줍니다.

Python
# 4. 리스트 안의 모든 데이터프레임을 하나로 통합
final_df = pd.concat(all_data, ignore_index=True)

여기서 ignore_index=True 옵션은 중요합니다. 각 파일이 가지고 있던 0, 1, 2... 순서의 인덱스를 무시하고, 통합된 데이터에 맞게 0번부터 새로 번호를 매겨주기 때문입니다.


4. 데이터의 출처 기록하기

파일을 다 합치고 나면 "이 데이터가 몇 번 파일에서 온 거였지?"라고 헷갈릴 때가 있습니다. 이럴 때를 대비해 합치기 직전에 **'파일명'**이라는 열을 하나 만들어주는 센스가 필요합니다.

Python
for file in file_list:
    df = pd.read_csv(file)
    df['source_file'] = file # 파일 이름을 새로운 열에 기록
    all_data.append(df)

이렇게 하면 나중에 특정 데이터에서 이상치가 발견되었을 때, 어떤 실험 파일이 범인인지 즉시 추적할 수 있습니다. 이것이 바로 연구의 '신뢰도'를 높이는 디테일입니다.


5. 결과물 저장하기: to_csvto_excel

열심히 합친 결과물은 다시 파일로 저장해야겠죠?

  • final_df.to_csv('total_result.csv', index=False)

  • final_df.to_excel('total_result.xlsx', index=False)

이 한 줄이면 엑셀에서 수동으로 저장할 때보다 훨씬 안전하고 빠르게 최종 보고서용 데이터셋이 완성됩니다.


## 핵심 요약

  • glob 라이브러리를 활용하면 특정 폴더 내의 수많은 파일 목록을 순식간에 추출할 수 있습니다.

  • for 반복문과 리스트를 결합하여 수백 개의 파일을 일일이 열지 않고도 메모리에 로드할 수 있습니다.

  • pd.concat() 함수는 분산된 데이터를 하나의 통합 데이터프레임으로 결합하는 핵심 도구입니다.


## 다음 편 예고

데이터를 다 합쳤으니 이제 결과물을 뽑아내야겠죠? 다음 시간에는 [시각화의 시작: Matplotlib으로 논문용 고해상도 그래프 그리기]를 다룹니다. 엑셀 그래프의 촌스러움을 벗어던지고, 클릭 한 번으로 뽑아내는 프로페셔널한 시각화의 세계로 안내합니다.


## 소통 질문

오늘 배운 '파일 합치기' 기능을 여러분의 실험 데이터에 적용한다면, 하루에 몇 시간 정도를 아낄 수 있을 것 같나요? 혹은 파일마다 형식이 조금씩 달라서 생기는 고민이 있다면 댓글로 남겨주세요!


댓글

이 블로그의 인기 게시물

[연구 자동화 #1] 엑셀의 한계를 넘어 파이썬으로: 연구 데이터 관리의 새로운 표준