컨텍스트 : 주식 거래 전략 백 테스터를 구축 중입니다. OHLCV 데이터가 포함 된 2446 개의 CSV가 있습니다. 각 CSV는 데이터의 1 거래일입니다. 퍼포먼스가 문제가 된 후에도이 파일들을 약 140 만 줄의 단일 CSV로 연결했습니다. 나중에 그 이상.격렬하게 변화하는 판다의 데이터 프레임리스트 반복의 성능
개발 초기에는 pd.read_csv를 사용하여 각 파일을 한 번에 하나씩 읽고 각 데이터 프레임을 목록에 추가했습니다. 그런 다음 데이터 프레임 목록에서 시뮬레이션을 실행합니다. 이 기술을 사용하여 시뮬레이션 자체 만 ~ 97 초 걸립니다.
all_days = []
for file in (os.listdir("C:/Users/XYZ/Desktop/EURUSD/CSV")):
all_days.append(pd.read_csv("C:/Users/XYZ/Desktop/EURUSD/CSV/"+file))
나는 빠르게 실행하기 위해 전체 프로그램을 원했다. 그래서 저는 하나의 CSV를 만들고 groupby를 사용하여 매일 데이터를 분리했습니다. 물론, 데이터 프레임 목록 작성은 훨씬 빠릅니다. 그러나 여기에 내가 루프를 던져 버릴 곳이있다 : 시뮬레이션이 상당히 느려졌다.과 마찬가지로 데이터 프레임 목록을 여전히 수신하고 있더라도 시뮬레이션에는 ~ 172 초
이 필요합니다. 또한 시뮬레이션이 똑같은 결과를 산출한다는 점도 주목할 가치가 있습니다. df = pd.read_csv("C:/Users/XYZ/Desktop/EURUSD/Concatenated CSVs/EURUSD.csv",
index_col=0,parse_dates=True)
df['Time'] = pd.to_datetime(df['Time'])
all_days = []
for each in df.groupby(pd.Grouper(key='Time',freq='D')):
if each[1].empty is False:
all_days.append(each[1])
성능이 저하 될 수있는 요인은 무엇입니까?
좋아, 내가 뭔가있을 것 같아. 두 번째 코드 블록의 for 루프 내에서 목록에 추가하기 전에 데이터 프레임의 인덱스를 재설정하면 시뮬레이션 실행 시간이 ~ 172 초에서 ~ 82 초로 단축되었습니다. 팬더 스 전문가의 말을 듣고 싶습니다. – jnic1989