2015-07-21 2 views
3

Я хотел бы прочитать большой .xls-файл параллельно с помощью pandas. в настоящее время я использую это:Как читать .xls параллельно с помощью pandas?

LARGE_FILE = "LARGEFILE.xlsx" 
CHUNKSIZE = 100000 # processing 100,000 rows at a time 

def process_frame(df): 
     # process data frame 
     return len(df) 

if __name__ == '__main__': 
     reader = pd.read_excel(LARGE_FILE, chunksize=CHUNKSIZE) 
     pool = mp.Pool(4) # use 4 processes 

     funclist = [] 
     for df in reader: 
       # process each data frame 
       f = pool.apply_async(process_frame,[df]) 
       funclist.append(f) 

     result = 0 
     for f in funclist: 
       result += f.get(timeout=10) # timeout in 10 seconds 

В то время как это работает, я не думаю, что это на самом деле ускоряет процесс чтения файла. Существует ли более эффективный способ достижения этого?

+1

Задача чтения Excel - это проблема с привязкой к I/O, чем проблема с привязкой к процессору, и я не думаю, что параллель может слишком сильно ускорить вашу задачу. –

+0

Возможно, есть лучший способ быстрее прочитать большой файл? – Gman

ответ

0

Только для информации: я читаю 13 Мбайт, 29000 строк csv примерно через 4 секунды. (не используя параллельную обработку) Archlinux, AMD Phenom II X2, Python 3.4, python-pandas 0.16.2.

Насколько велик ваш файл и сколько времени требуется, чтобы его прочитать? Это поможет лучше понять проблему. Ваш листок превосходства очень сложный? Может быть, read_excel с трудом обрабатывает эту сложность?

Предложение: установите genumeric и используйте вспомогательную функцию ssconvert, чтобы перевести файл в csv. В вашей программе измените на read_csv. Проверьте время, используемое ssconvert, и время, затраченное на чтение_csv. Кстати, у python-pandas были значительные улучшения, в то время как он перешел от версии 13 .... 16, поэтому полезно проверить, что у вас есть последняя версия.

Смежные вопросы