본문 바로가기
Python (Data)/데이터 가공

[Python Pandas] 폴더 내 여러 개의 csv파일을 하나의 데이터 프레임으로 한 번에 합치기

by Gina Sim 2021. 3. 29.

FinanceData에서 받은 연도별 주식 데이터를 하나의 데이터 프레임으로 합치는 작업

 

먼저 FinanceData에서 알려주는 방법을 따라 데이터를 다운로드하게 되면

marcap/data라는 폴더 안에 주식 데이터 파일이 연도별로 존재한다.

 

파일 리스트 확인하기

먼저 FinanceData에서 알려주는 방법을 따라 데이터를 다운받게 되면

marcap/data라는 폴더 안에 주식 데이터 파일이 연도별로 존재한다.

 

파일 리스트를 확인하려고 할 때, Jupyter에서 "ls" 명령을 치려고 하니 에러가 발생하였는데

구글링 해 본 결과 os를 import하고 다음과 같은 "os.listdir()"를 이용하면 된다/

 

위 사진을 보면 95년부터 21년까지 연도별로 파일이 존재하는 것을 확인 할 수 있다.

모든 연도별 데이터에 대해 시계열 분석을 할 것이기 때문에 하나의 데이터 프레임으로 합치고자 한다.

 

 

파일 여러개 한 번에 불러오기

기본적으로 파일을 읽어오기 위해 pandas의 "read_csv"를 이용하는데,

FinanceData에서 파일을 불러오는 방법을 알려주지만 하나의 파일을 불러오는 코드만 나와있어서

for문을 이용해서 한번에 다 불러오도록 코드를 작성하였다.

 

1. 파일 리스트 저장

- 앞서 파일 리스트를 확인하는 명령이었던 "os.listdir()"를 이용해 폴더 내의 파일 리스트를 읽어 들여 forders에 저장한다

forders= os.listdir('marcap/data')

 

2. 현재 작업위치(working directory) 이동

cd marcap/data
"read_csv()"를 이용해 파일을 읽을 때 files라는 변수로 접근하게 되면 
파일의 주소는 포함하지 않은채 파일 명만 들어가기 때문에
해당 파일이 있는 폴더 외 공간에서 작업을 하게 될 경우 파일을 찾을 수 없다는 에러가 발생한다.

따라서 해당 파일이 있는 곳으로 working directory를 이동하여 파일을 read 해준다.
이렇게 할 경우 같은 폴더 내에서 작업하기 때문에 파일 주소를 지정해주지 않아도 파일을 읽을 수 있다.

 

 

 

 

 

3. 데이터 프레임 생성하고 모든 파일 합치기

# 새로운 데이터 프레임 생성
df_all_years = pd.DataFrame()

for files in forders:
    df= pd.read_csv(files, dtype={'Code':str}, parse_dates=['Date'])
    df_all_years = pd.concat([df_all_years, df])
for 문 

1. 파일 리스트를 저장한 forders에 files라는 변수로 접근
2. FinanceData에서 안내하는 코드대로 "dtype={'Code':str}, parse_dates=['Date']"는 남겨두고
3. 파일 명을 지정하는 대신 files라는 변수를 둔다
4. files로 폴더의 파일 하나하나에 접근하여 df라는 변수에 저장한다
5. 새로 생성한 데이터 프레임 df_all_years과 파일을 불러들인 df를 "concat"을 이용하여 합친다.
6. for문에서 데이터 병합을 반복함으로써 새로운 데이터 파일을 불러들일 때마다 뒤에 이어 붙일 수 있음

 

4. 생성된 데이터 프레임 확인

Code와 날짜를 기준으로 정렬하여 데이터 프레임 확인

 

 

 

 

 

 

반응형

댓글