코드 효율화 : 엑셀에 있는 여러가지 일간 가격 데이터를 read_excel 로 읽어 딕셔너리 형태로 만들기.

조회수 759회
#슈퍼파일 Org 만들기

df1 = pd.read_excel('C:\\pytest\\Data_org_슈퍼파일.xlsx',sheet_name='name')

Data_Org = {}
for Freq in set(df1['Freq']):
    Data_Org[Freq] = {}
    for i,NAME in tqdm(enumerate(df1[df1['Freq']==Freq]['NAME'])):
        df= pd.read_excel('C:\\pytest\\슈퍼파일_ver1_2020314.xlsm',sheet_name=Freq)
        all_data = []
        for x in range(0,len(df.columns),2):
            temp_df = []
            temp_df = df[[df.columns[x], df.columns[x+1]]]
            temp_df = temp_df.fillna(method='bfill').dropna()
            temp_df.columns = ['Date', 'Data']
            all_data.append(temp_df)
        Data_Org[Freq][df1[df1['Freq']==Freq].iloc[i]['NAME']]= all_data[i]

Data_Org

df1은 아래와 같습니다.

이미지

안녕하세요. 엑셀에 있는 여러가지 일간 가격 데이터를 딕셔너리 형태로 만들기 위해서 위와 같은 코드를 작성해서 활용하고 있습니다.

일간 가격 데이터 과거 히스토리가 1970년대부터 있는 자료도 있긴 한데 위 데이터를 읽어들이는데 무려 4분이 걸리네요. 총 가격 개수는 21개 밖에 되지 않습니다.

위 코드를 보다 효율적으로 수정해서 데이터 읽어들이는 시간을 단축할 수 있는 방법이 있을까요?

감사합니다.

  • 우선은 for 문 안에서 read_excel 을 쓸데없이 반복하는 게 보이네요. nowp 2020.6.29 14:04
  • 잘은 모르겠지만 전체 데이터셋이 그렇게 크지 않다면 그냥 특정 디렉토리의 모든 파일들을 한번에 쫙 불러서 변수에 올린 다음 그거만 가지고 돌리는 것도 방법입니다. 엽토군 2020.6.29 14:40
  • daewon님 말씀처럼 "for 문 안에서 read_excel 을 쓸데없이 반복"하는 부분만 수정했는데도 상당히 빨라졌습니다. ^^ 감사합니다. 문창훈 2020.6.29 14:47

1 답변

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)