본문 바로가기
IT - 코딩/유용한 코드

한 폴더 내 파일들 전부 불러오기(with python)(for 머신러닝)

by 조기정 2022. 8. 12.
# 사용할 모든 파일 리스트로 읽어오기
import os
import numpy as np
import pandas as pd
# import math #math 모듈을 먼저 import해야 한다.    

# 파일들이 저장된 경로 
os_file_list = os.listdir('C:/Users/Happy/Desktop/논문용/krwusdtdata/전처리된파일')
# 저장된 폴더 경로 
read_path = "C:\\Users\\Happy\\Desktop\\논문용\\krwusdtdata\\전처리된파일\\"

# 딕셔너리 안에 모든 데이터 프레임 저장
All_data = {}

for files in os_file_list:
    print(files)
    df= pd.read_csv(read_path+files, encoding = "cp949")
    All_data[files[:-4]] = df

해당 방식은 모든 데이터프레임을 하나의 딕셔너리 안에 저장하는 방식이다.

    # All_data , key_list
    for i in range(len(key_list)):
        print(key_list[i])
        print(All_data[key_list[i]].info())
    #     All_data[key_list[i]] = All_data[key_list[i]]

    def set_index(df):
        df['time'] = pd.to_datetime(df['time'], format='%Y-%m-%d', errors='raise')
        df = df.set_index('time',drop=False)
        return df

    Use_data = {}
    # All_data , key_list
    for i in range(len(key_list)):
    #     print(key_list[i])
    #     print(All_data[key_list[i]].info())
        Use_data[key_list[i]] = All_data[key_list[i]].copy() # [["time","Open"]]
    #     All_data[key_list[i]] = All_data[key_list[i]]

    for i in range(len(key_list)):
        print(key_list[i],i)
        Use_data[key_list[i]] = set_index(Use_data[key_list[i]])

    # 기간 조정
    pariod_min_list = [Use_data[key_list[i]].index.min() for i in range(len(key_list)) ]
    pariod_max_list = [Use_data[key_list[i]].index.max() for i in range(len(key_list)) ]
    pariod_start = max(pariod_min_list)
    pariod_end = min(pariod_max_list)
    print("시작일 교집합 : ",pariod_start)
    print("최종일 교집합 : ",pariod_end)

    #날짜 조정.(모든 사용할 데이터들의 날짜를 같게 조정함.)
    for i in range(len(key_list)):
        Use_data[key_list[i]] = Use_data[key_list[i]].loc[Use_data[key_list[i]]["time"].between(pariod_start,pariod_end)]
    # 모든 컬럼명을 데이터 프레임 이름으로 바꿈
    for i in range(len(key_list)):
        col_list = list(Use_data[key_list[i]].columns)
        col_list = list(set(col_list) - {"time"})
        for j in range(len(col_list)):
            print(key_list[i]+"_"+col_list[j])
            Use_data[key_list[i]] = Use_data[key_list[i]].rename(columns={col_list[j]:key_list[i]+"_"+col_list[j]})

    ALL_DATA_BY_USE = pd.DataFrame()
    for i in range(len(key_list)):
    #     Use_data[key_list[i]]
        print(len(Use_data[key_list[i]]),key_list[i])
        if i == 0: # 처음시작만 @ 또는 가장 길이가 긴 값!!!!(날짜)
            ALL_DATA_BY_USE = Use_data[key_list[i]]
        else:
            ALL_DATA_BY_USE = pd.concat([ALL_DATA_BY_USE,Use_data[key_list[i]]],axis = 1)
    #     try:
    #         del ALL_DATA_BY_USE["time"]
    #     except:
    #         pass
    ALL_DATA_BY_USE = ALL_DATA_BY_USE.fillna(method="ffill")

    if (len(ALL_DATA_BY_USE) == len(ALL_DATA_BY_USE.drop_duplicates())): # 중복데이터가 더 없는지 확인
        pass
    else:
        print("길이가 다름")

    # try:
    #     del ALL_DATA_BY_USE["time"]
    # except:
    #     pass

    try:
        del ALL_DATA_BY_USE["time"]
    except:
        pass

위 코드는 하나의 데이터 프레임 안에 넣는 방법인데.. 일단 설명은 나중에 하겠습니다.. 코드도 좀 급하게 짜서 

 

import os
import pandas as pd
# import xlrd
os.getcwd()
path = os.getcwd()
os_file_list = os.listdir(path)

# xls파일만..
xls_file_list = []
for i in range(len(os_file_list)):
    if  os_file_list[i].find(".xls") == -1:
        pass
    else:
        xls_file_list.append(os_file_list[i])
        
new_df = pd.DataFrame()
for i in range(len(xls_file_list)):
    if i == 0:
        df = pd.ExcelFile(xls_file_list[i])
        new_df = df.parse(df.sheet_names[1])
    else:
        df = pd.ExcelFile(xls_file_list[i])
        df_1 = df.parse(df.sheet_names[1])
        new_df = pd.concat([new_df,df_1],axis = 1)
        
new_df.to_csv(path+"\\종합"+".csv",index = False, encoding = "cp949")

위 코드는 모든 xls파일을 csv파일로 저장하는 방법입니다

# # 새로운 엑셀 파일 생성
# writer = pd.ExcelWriter(path+"\\전처리후"+"\\종합"+".xlsx")


# for i in range(len(xls_file_list)):
# #     print(i,"=====")
#     df = pd.ExcelFile(xls_file_list[i])
# #     print(df.parse(df.sheet_names[1]))
#     # 파일이름을 컬럼명으로 하여 저장
#     df.parse(df.sheet_names[1]).to_excel(writer, sheet_name = xls_file_list[i][:-4])
# writer.save()
# writer.close()

해당 방식을 이용하면 한 엑셀 파일에 시트명만 달리해서 모든엑셀파일을 저장하는 방법입니다