2016-11-30 3 views
1

.csv20MB의 읽어야합니다. 이러한 파일은 8 열과 5198 행으로 구성된 테이블입니다. 특정 열 I에 대한 일부 통계를 수행해야합니다.Python : 대형 .csv 파일을 읽는 가장 좋은 방법은 무엇입니까?

나는 내가하는 일 n 다른 파일이 있습니다

stat = np.arange(n) 
    I = 0 
    for k in stat: 
     df = pd.read_csv(pathS+'run_TestRandom_%d.csv'%k, sep=' ') 
     I+=df['I'] 
    I = I/k ## Average 

이 프로세스는 0.65s 소요하고 가장 빠른 방법이 있는지 궁금.

+0

아마도'pd.read_csv'에'memory_map = True'를 지정하려고 시도합니다 –

+0

- 데이터가 배타적으로 숫자이면 ** csv ** 모듈을 사용할 필요가 없습니다. ** split **을 사용할 수 있습니다. - 사전을 사용하여 레코드 필드에 액세스하는 데 약간의 오버 헤드가 있습니다. 대신 CSV의 헤더에서 ** 찾기 **를 사용한 다음 해당 색인을 사용하여 분할 레코드에서 항목을 얻을 수 있습니다. –

+0

첫 번째 행은 숫자가 아니지만'split'을 사용할 수 있습니까? – emax

답변

-2

편집 : 분명히이 방법을 사용하는 것이 좋습니다. 내가 한 일을하지 마라./

나는 지금 같은 크기의 데이터 세트로 유사한 문제에 대해 작업하고있다. 내가 사용하는 방법은 내 시스템에서의 .1sec 약이 배 NumPy와의 genfromtxt

import numpy as np 

ary2d = np.genfromtxt('yourfile.csv', delimiter=',', skip_header=1, 
    skip_footer=0, names=['col1', 'col2', 'col3', 'col4', 'col5', 'col6', 'col7', 'col8']) 

입니다

이 가진 하나의 문제는 숫자가 아닌 값이 단순히 nan로 대체한다는 것입니다 어떤 것이 좋지 않을 수도 있습니다.

+0

['genfromtxt'가'read_csv'보다 느리고 (http://stackoverflow.com/q/21486963/364696) 실제 CSV를 지원하지 않는다는 점을 감안할 때 (','의 구분 기호는 동일하지 않습니다 인용, 도피 등을 다루는 적절한 CSV로서의 것), 이것이 어떻게 도움이 될지 모르겠습니다. 'read_csv'는 CSV를 올바르게 수행하고'genfromtxt'가 잘못되어 일반 목적 (읽기 : 특정 코드보다 느릴 가능성이 높음) 인 CSV에 최적화되어 있기 때문에'genfromtxt'가 잘못된 방법입니다. – ShadowRanger

관련 문제