2016-07-12 4 views
2

대상 디렉토리의 여러 Python Pandas DataFrame으로 여러 개의 CSV 파일 (수백 개의 파일, 수백 개의 줄이 있지만 각기 동일한 수의 열이 있음)을 읽고 싶습니다.파이썬 데이터 프레임으로 여러 csv 가져 오기 프로세스 속도 향상

아래 코드는 작동하지만 너무 느립니다. 30 개 파일을 실행하는 데 몇 분이 걸립니다 (내 파일을 모두로드하면 얼마나 오래 기다려야하는지). 더 빨리 작동하도록 변경하려면 어떻게해야합니까?

게다가, 나는 "_"(보통의 utf-8)에 "_" ? 파일에 프랑스어 악센트가 있기 때문에 coding=latin-1을 사용합니다.

#coding=latin-1 

import pandas as pd 
import glob 

pd.set_option('expand_frame_repr', False) 

path = r'D:\Python27\mypfe\data_test' 
allFiles = glob.glob(path + "/*.csv") 
frame = pd.DataFrame() 
list_ = [] 
for file_ in allFiles: 
    df = pd.read_csv(file_, index_col = None, header = 0, sep = ';', dayfirst = True, 
        parse_dates=['HeurePrevue','HeureDebutTrajet','HeureArriveeSurSite','HeureEffective']) 
    df.drop(labels=['aPaye','MethodePaiement','ArgentPercu'],axis=1,inplace=True) 
    df['Sens'].replace("\n", "-", inplace=True,regex=True) 
    list_.append(df) 

    print "fichier lu:",file_ 

frame = pd.concat(list_) 

print frame 
+0

파이썬에 도달하기 전에 모든 파일을 연결할 수 있습니까? 그런 식으로 하나의 파일을 읽을 수 있습니까? 다른 방법으로는 파일을 함께 압축하여 운영 체제의 파일 캐시의 이점을 활용할 수 있습니다. – chrisaycock

+0

파이썬에 도달하기 전에 연결하는 법을 정말로 모르겠습니다. 모든 파일을 하나의 CSV 파일로 만드시겠습니까? 그리고'zip'을 위해서, 어느 단계에 있습니까? – ch36r5s

+0

예, 큰 CSV 파일 하나를 만들거나'zip' 파일을 만드십시오. 이것들은 파이썬과 아무 관련이 없습니다. 파이썬에서 외부 적으로 이것을해야 할 것이다. 모든 데이터가있는 파일이 하나 있으면 Python 스크립트에서 해당 파일을 직접 읽게하십시오. – chrisaycock

답변

1

당신이 시도 할 수있는 다음 - 만 정말 필요한 열, 사용 목록 이해를 읽고 꽤 느린이기 때문에, 한 번 pd.concat([ ... ], ignore_index=True) 전화 : 당신이하기에 충분한 메모리가있는 경우이 작동합니다

# there is no sense to read columns that you don't need 
# specify the column list (EXCLUDING: 'aPaye','MethodePaiement','ArgentPercu') 
cols = ['col1', 'col2', 'etc.'] 
date_cols = ['HeurePrevue','HeureDebutTrajet','HeureArriveeSurSite','HeureEffective'] 

df = pd.concat(
     [pd.read_csv(f, sep = ';', dayfirst = True, usecols=cols, 
        parse_dates=date_cols) 
     for f in allFiles 
     ], 
     ignore_index=True 
    ) 

두 개의 결과 DF ...

+0

그것은'date_cols'에서 작동하지만'usecols'에 관해서는'ValueError : Usecols does not matches names'라는 오류를 반환합니다. 'IndexError :리스트 인덱스가 범위를 벗어났습니다. ' – ch36r5s

+0

'cols'리스트에 필요한 컬럼 이름을 지정해야합니다. 에러 메시지'ValueError : Usecols는 이름이 일치하지 않습니다.'자명하다. – MaxU

관련 문제