Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 편스토랑
- 더현대서울 맛집
- Git
- 코로나19
- 프로그래머스
- ChatGPT
- Baekjoon
- gs25
- dacon
- ubuntu
- programmers
- github
- AI 경진대회
- 데이콘
- 백준
- 자연어처리
- hackerrank
- PYTHON
- 편스토랑 우승상품
- Real or Not? NLP with Disaster Tweets
- 우분투
- leetcode
- Docker
- Kaggle
- 프로그래머스 파이썬
- 금융문자분석경진대회
- 맥북
- 캐치카페
- SW Expert Academy
- 파이썬
Archives
- Today
- Total
솜씨좋은장씨
[Python] 여러 개의 엑셀파일 하나로 합치는 방법! ( feat. pandas ) 본문
728x90
반응형
오늘 친구의 부탁으로 날짜별 특정 키워드에 대한 네이버 뉴스 크롤링을 진행하였는데
각 날짜별로 만들어진 이 모든 엑셀 파일을 하나의 엑셀로 만들어서 전달해야하여 pandas를 활용해서 작업해보았습니다.
추후 또 사용할 일이 있을 것 같아 적어보려 합니다. ( 전체 코드는 맨 마지막에 있습니다. )
1. 병합을 원하는 엑셀파일 목록 가져오기
1-1. os.listdir을 이용하는 방법
import os
file_format = "파일 포맷(확장자)" # .csv .xlsx
file_path = "파일 경로"
file_list = [f"{file_format}/{file}" for file in os.listdir(file_path) if file_format in file]
위의 사진의 엑셀 파일을 예시로 들면 아래와 같습니다.
import os
file_format = ".xlsx" # .csv
file_path = "/Users/donghyunjang/PythonHome/naver_news_article/당근마켓"
file_list = [f"{file_path}/{file}" for file in os.listdir(file_path) if file_format in file]
1-2. glob.glob을 이용하는 방법
import glob
file_format = "파일 포맷(확장자)" # .csv .xlsx
file_path = "파일 경로"
file_list = glob.glob(f"{file_path}/*{file_format}")
위의 사진의 엑셀 파일을 예시로 들면 아래와 같습니다.
import glob
file_format = ".xlsx" # .csv
file_path = "/Users/donghyunjang/PythonHome/naver_news_article/당근마켓"
file_list = glob.glob(f"{file_path}/*{file_format}")
1-3. 위의 두 방법을 활용하여도 되고 본인이 직접 list로 작성하여도 됩니다.
file_list = ["file01.xlsx", "file02.xlsx", "file03.xlsx"]
2. Pandas를 활용하여 엑셀 파일 합치는 방법
2-1. Pandas 라이브러리 설치 및 import
엑셀 파일을 읽고 쓰는데에는 pandas 라이브러리를 활용합니다.
이에 pandas 라이브러리를 설치하고 이를 import 시켜줍니다.
$ pip install pandas
import pandas as pd
여기서 as pd는 앞으로 pandas를 활용할때 pd로 줄여서 사용하겠다는 뜻입니다.
2-2. 합병한 결과를 담을 pandas DataFrame 객체 생성하기
merge_df = pd.DataFrame()
2-3. pandas로 파일을 읽고 병합에 활용할 column 설정하여 조금 전 생성한 DataFrame에 이어 붙이기
2-3-1. 파일 읽어오기 ( .xlsx 의 경우 / .csv 의 경우 )
첫번째 단계에서 만들어둔 파일 목록에서 하나씩 파일을 가져와 pandas로 읽어 DataFrame 형식으로 만들어줍니다.
.xlsx 파일의 경우
for file_name in file_list:
file_df = pd.read_excel(file_name)
.csv 파일의 경우
for file_name in file_list:
file_df = pd.read_csv(file_name, encoding='utf-8')
# encoding 기본은 utf-8 / 오류 발생 시 해당 파일에 맞는 인코딩으로 바꾸어야 함
# 한국어 문서는 euc-kr 또는 cp949 일 수 도 있음
2-3-2. 병합을 희망하는 column 설정
모든 column을 활용하는 경우
columns = list(file_df.columns)
column 중 일부만 병합에 사용하려는 경우 ( 직접 원하는 column 리스트로 작성 )
columns = ["column1", "column2"]
위의 두 방법 중 하나를 선택하여 목록을 작성하고
temp_df = pd.DataFrame(file_df, columns=columns)
읽어온 파일에서 해당 column만 남겨 temp_df 에 저장합니다.
2-3-3. 맨 처음 생성해 둔 merge_df에 이어 붙이기
merge_df = merge_df.append(temp_df, ignore_index=False) # ingnore_index = 기존 1, 2, 3, 4 번호 무시
3. 원하는 형식 ( csv 또는 xlsx ) 로 저장하기
이제 저장만 하면 끝입니다.
.csv 로 저장하고 싶은 경우
merge_df.to_csv("병합파일.csv, index=False)
.xlsx로 저장하고 싶은 경우
merge_df.to_excel("병합파일.xlsx", index=False)
👨🏻💻 전체 코드
import pandas as pd
import glob
def merge_excel_files(file_path, file_format, save_path, save_format, columns=None):
merge_df = pd.DataFrame()
file_list = file_list = [f"{file_path}/{file}" for file in os.listdir(file_path) if file_format in file]
for file in file_list:
if file_format == ".xlsx":
file_df = pd.read_excel(file)
else:
file_df = pd.read_csv(file)
if columns is None:
columns = file_df.columns
temp_df = pd.DataFrame(file_df, columns=columns)
merge_df = merge_df.append(temp_df)
if save_format == ".xlsx":
merge_df.to_excel(save_path, index=False)
else:
merge_df.to_csv(save_path, index=False)
if __name__ == "__main__":
merge_excel_files(file_path="/Users/donghyunjang/PythonHome/naver_news_article/당근마켓", file_format=".xlsx",
save_path="/Users/donghyunjang/PythonHome/naver_news_article/당근마켓/20211201~20211229_당근마켓_네이버_기사.xlsx", save_format=".xlsx")
읽어주셔서 감사합니다.
'Programming > Python' 카테고리의 다른 글
Comments