Подтвердить что ты не робот

Самый быстрый способ разбора больших файлов CSV в Pandas

Я использую pandas для анализа больших файлов данных здесь: http://www.nielda.co.uk/betfair/data/ Они имеют размер около 100 мегабайт.

Каждая загрузка csv занимает несколько секунд, а затем больше времени для преобразования дат.

Я пробовал загружать файлы, преобразовывая даты из строк в datetime, а затем повторно сохраняя их как файлы pickle. Но загрузка их занимает несколько секунд.

Какие быстрые методы я могу использовать для загрузки/сохранения данных с диска?

4b9b3361

Ответ 1

Как сказал @chrisb, pandas 'read_csv, вероятно, быстрее, чем csv.reader/numpy.genfromtxt/loadtxt. Я не думаю, что вы найдете что-то лучше для синтаксического анализа csv (в качестве примечания read_csv не является "чистым python" решением, поскольку синтаксический анализатор CSV реализован на C).

Но если вам приходится часто загружать/запрашивать данные, решение должно состоять в том, чтобы разобрать CSV только один раз, а затем сохранить его в другом формате, например HDF5. Вы можете использовать pandasPyTables в фоновом режиме) для эффективного запроса (docs).
См. Здесь для сравнения производительности io HDF5, csv и SQL с pandas: http://pandas.pydata.org/pandas-docs/stable/io.html#performance-considerations

И, возможно, релевантный другой вопрос: "Большие данные" рабочие потоки с использованием pandas

Ответ 2

Одной проверкой является фактическая производительность самой дисковой системы. Особенно, если вы используете вращающиеся диски (а не SSD), ваша практическая скорость чтения диска может быть одним из объясняющих факторов производительности. Поэтому, прежде чем делать слишком большую оптимизацию, проверьте, требуется ли чтение одинаковых данных в памяти (например, mydata = open('myfile.txt').read()) эквивалентное количество времени. (Просто убедитесь, что вы не укусили дисковые кэши, если вы загружаете одни и те же данные дважды, во второй раз это будет намного быстрее, потому что данные уже находятся в кеше ОЗУ.)

См. обновление ниже, прежде чем поверить, что я пишу под

Если ваша проблема заключается в синтаксическом анализе файлов, я не уверен, поможет ли вам какое-либо решение Python. Поскольку вы знаете фактическую структуру файлов, вам не нужно использовать общий синтаксический анализатор CSV.

Есть три вещи, которые нужно попробовать:

  • Пакет Python csv и csv.reader
  • NumPy genfromtext
  • Numpy loadtxt

Третий, вероятно, самый быстрый, если вы можете использовать его с вашими данными. В то же время он имеет самый ограниченный набор функций. (Что на самом деле может сделать это быстро.)

Кроме того, предложения, предоставленные вами в комментариях crclayton, BKay и EdChum, являются хорошими.

Попробуйте разные альтернативы! Если они не работают, вам придется писать что-то на компилируемом языке (либо скомпилированном Python, либо, например, C).

Обновление: Я верю, что ниже chrisb, т.е. парсер pandas работает быстро.

Тогда единственный способ ускорения разбора - написать парсер, зависящий от приложения, на языке C (или другом компилированном языке). Общий анализ файлов CSV не является простым, но если известна точная структура файла, могут быть ярлыки. В любом случае разбор текстовых файлов происходит медленно, поэтому, если вы когда-либо сможете перевести его в нечто более приемлемое (массив HDF5, NumPy), загрузка будет ограничена только производительностью ввода/вывода.