2016-11-30 2 views
1

Мне нужно прочитать большое .csv около 20MB. Эти файлы представляют собой таблицы, составленные из столбцов 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

Возможно, попробуйте указать 'memory_map = True' в' pd.read_csv' –

+0

. Если данные являются исключительно числовыми, тогда нет необходимости использовать модуль ** csv **. Вы можете использовать ** split **. - Есть некоторые небольшие накладные расходы для использования словаря для доступа к полям записи. Вместо этого вы можете использовать ** find ** в заголовке в csv, а затем использовать этот индекс для получения элементов из разделенной записи. –

+0

первая строка не является числовой, хотя, возможно ли использовать 'split'? – emax

ответ

-2

EDIT: По-видимому, это действительно плохой способ сделать это! Не делайте то, что я сделал. Догадываюсь:/

Я сейчас работаю над подобной проблемой примерно с таким же набором данных того же размера. Метод я использую genfromtxt Numpy в

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']) 

В моей системе это раз примерно .1sec в общей сложности

одна проблема состоит в том, что любое значение, которое не является числовым просто заменяется nan что может быть не то, что вы хотите

+0

Учитывая, что ['genfromtxt' медленнее, чем' read_csv'] (http://stackoverflow.com/q/21486963/364696) и что он фактически не поддерживает истинный CSV (разделитель ',' не тот же как правильный CSV, который охватывает цитаты, убегает и т. д.), я не уверен, как это поможет. 'read_csv' правильно выполняет CSV и оптимизирован для CSV, где' genfromtxt' является неправильным и общим назначением (читайте: вероятно медленнее, чем специализированный код), поэтому 'genfromtxt' - неправильный путь. – ShadowRanger

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