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

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

1 답변

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

Hashcode는 개발자들을 위한 무료 QnA 사이트입니다. 계정을 생성하셔야만 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 계정을 생성하셔야만 글을 작성하실 수 있습니다.