-
여러개 파일을 하나로 병합하기!파이썬, Python/엑셀 대신 파이썬! 2023. 6. 20. 23:43728x90
파이썬을 하다 보면, 여러개 파일로 나눠서 작업을 한 후 하나로 합치고 싶을 때가 있다.
보통의 경우 엑셀로 하나씩 옮겨담는 작업을 하곤 했었는데,
대용량의 데이터를 다룰때는 엑셀이 멈춰버리는 현상을 몇번 겪고 난 뒤,
파이썬에서 이마저도 처리하고 싶어졌다.아래와 같은 순서로 진행된다.
1. 특정 path에 만들어 놓은 파일들을 리스트업 하기. (특정 확장자 혹은 특정 단어로 시작되는 파일만 선택도 가능함)
2. 판다스 데이터프레임으로 모조리 불러와서 합치기
3. 마지막으로 합친 데이터프레임을 하나의 파일로 내보내기 (Export)코드로 한번 살펴보자
import pandas as pd import os path = '~~' #예) c:\\python\\datafold\\ > 윈도우에서는 역슬래쉬(\)를 두개 써야함 file_list = os.listdir(path) print(file_list) # 파일 리스트에 들어간 녀석들을 보기 # csv 로 끝나는 파일들을 모두 넣기 file_list_csv = [file for file in file_list if file.endswith("csv") merged_df = pd.DataFrame() for file in file_list_csv: df = pd.read_csv(path+file, dtype='object') merged_df = merged_df.append(df) # csv 파일로 내보내기 (한글 포함되어있을 때는 반드시 encoding='utf-8-sig' 추가해야함) merged_df.to_csv("파일명.csv", index=False, encoding='utf-8-sig')
혹시 잘 모르시는 분들을 위해,
1) 한줄로 끝나는 for 문 해석
한줄로 끝나는 for문을 해석하자면,
file_list에 들어있는 친구들을 하나씩 file 변수로 호출해서 작업을 하는데,
조건문(if)에 의해 끌어낸 변수(file)의 끝이 'csv'로 끝난다면,
리스트[ ]에 그 변수(file)을 집어넣어라. 아니면 안넣음
2) pd.read_csv 에서 왜 옵션을 dtype='object'로 넣는가?
만약 옵션을 안넣게 되면, 데이터 프레임의 컬럼 내 모든 값들을 보고 어떤 데이터 타입인지 결정해야하는데,
이 과정이 상당히 속도를 저하시키는 원인이 된다.
따라서, 사전에 데이터 타입을 'object'로 정의 한다면 그 과정을 생략할 수 있어 대용량 파일을 불러올때 유리하다.
3) to_csv로 내보낼때, 가끔 한글 파일이 깨질 때가 있는데?
이는 인코딩 옵션을 따로 주지 않아서 발생되는 문제점이다.
따라서, 한글이 깨질 때에는 반드시 to_csv 내에 아래 옵션을 추가한다.
encoding = 'utf-8-sig'
반응형'파이썬, Python > 엑셀 대신 파이썬!' 카테고리의 다른 글
맨앞의 컬럼을 제외한 나머지 컬럼의 데이터 타입을 바꾸자! (0) 2023.06.21 RangeIndex ?? (0) 2023.06.21 가로축과 세로축을 한번에 바꾸고 싶을 경우(행,열을 서로 바꾸기) (0) 2023.06.21 엑셀의 필터기능을 파이썬에서_(1) 일괄 값 입력 (0) 2023.06.21 엑셀에서 수식오류로 #NAME? 이 된 셀을 파이썬에서 처리하는 방법? (0) 2023.06.20