분석가 Step 1. 데이터 분석/Python

특정 폴더 안의 특정 파일(목록) 반복해서 가져오기

뚱뿌 2023. 3. 16. 17:32

지난 1탄에서는 

특정 폴더 안에 있는 파일(목록)만을 불러왔다. 

 

1탄: https://danha23.tistory.com/7

 

특정 폴더 안의 특정 파일(목록) 가져오기

특정 폴더 안에있는 특정 파일(목록)을 가져오자. 1) pathlib, common을 이용하여 특정 폴더와 파일 경로 불러오기 경로를 불러온 후, 해당 폴더에 어떤 파일이 있는지 os.listdir()을 이용하여 확인하기

danha23.tistory.com

 

이번에는 

특정 폴더 안에있는 특정 파일(목록)을 반복해서 불러오겠다.

 

먼저, 앞선 단계에서 특정 폴더 내에 있는 모든 파일(목록)들을 불러온 변수에서 파일들을 반복문(for)으로 불러온다.

for f in file_names:
    print(f)

 

불러온 파일들 중에서 '.xlsx' 형식의 데이터를 불러오겠다.

  • 만일 csv 파일을 불러오길 원한다면, 'xlsx' 대신 'csv'를 입력하면 된다.
for f in file_names:
    if 'xlsx' in f:
    	print(f)

 

이제 특정 폴더 내의 특정 파일(목록)들을 불러온 후 파일의 개수를 확인하겠다.

os.path.isfile() 함수를 이용하여 특정 파일들의 갯수를 확인하였다. (3개로 나타남)

  • DF : DATA는 path_s 대체 가능 / 데이터를 불러오기 위한 변수 (경로 + 파일명)
  • df : 불러온 파일들에 대한 각 데이터
num = 0
for f in file_names:
    if 'xlsx' in f:
        
        DF = DATA/f
        df = pd.read_excel(DF, sheet_name='통계', engine='openpyxl', header=[5,6], index_col=[0,1,2])
        
        # 폴더 안의 파일 갯수 확인
        if os.path.isfile(os.path.join(DATA, f)):
            num += 1

 

마지막으로 총 3개의 데이터를 하나로 합치는 과정을 진행하였다. 

해당 데이터는 멀티 인덱스/컬럼으로 되어있기에 stack() 함수를 이용하여 데이터를 재구성하였다. 

▶ 참고 : https://danha23.tistory.com/6

 

그리고 각 데이터 내에는 '년도'와 '월'이 없기에 해당 '년도'와 '월'을 알맞게 넣어주었다. 

그 후, 생성한 데이터프레임 df_new 변수에 넣어줌으로써 데이터를 하나로 결합하였다.

 

최종적으로 생성한 데이터는 csv 파일로 저장하였다.

df_new = pd.DataFrame()
i = 1

for i in range(i, num+1):
    df_2 = df.stack(level='연령').reset_index()
    df_2 = df_2.drop('level_0', axis = 1)
    df_2['연도'] = '2021년'
    df_2['월'] = i
                    
    df_new = pd.concat([df_new, df_2])

df_new.to_csv("df_new.csv", index = False, encoding = 'euc-kr')

 

[참고자료]