Ускорьте pandas read_csv для больших CSV с переменными строками и 50K + столбцами - PullRequest
0 голосов
/ 10 марта 2020

Я пытаюсь прочитать файл CSV, содержащий переменное число столбцов и рядов, чтобы вычислить (минимальное, максимальное, среднее, 75/95 квантиль) значения для каждого столбца. Количество столбцов очень большое (более 10 000 столбцов, может go до 100 000 столбцов или более в зависимости от конфигурации эксперимента). Типичное количество строк может составлять 3000 образцов. Типичный размер CSV составляет 700 МБ.

Что я знаю о наборе данных:

  1. Первый столбец - это тип даты
  2. Положение и название других столбцов отличаются от data-set to data-set и неизвестны на момент загрузки данных.
  3. Данные во всех столбцах, кроме первого, имеют тип int64 или float64.
  4. Я могу применить некоторая эвристика для определения типа данных некоторых, но не всех столбцов по их именам.

Моим главным узким местом для анализа является загрузка набора данных с использованием pandas read_csv. После того, как набор данных был загружен в кадр данных, остальная часть вычислений очень быстрая.

Если бы я вычислял только минимальные, максимальные и средние значения, я мог бы прочитать набор данных по частям и попытаться ускорить read_csv часть. Однако, чтобы определить различные квантили, я считаю, что весь столбец должен быть считан в фрейм данных.

Как я могу ускорить фазу загрузки данных

  1. Могу ли я указать некоторые, но не все столбцы в аргументе dtype для read_csv. Способствует ли это ускорению чтения CSV. Если так, то почему?

Я обнаружил, что это действительно способствует ускорению. Похоже, Pandas тратит много времени на определение типа данных. Я создал словарь dtype, используя некоторые эвристики для имени столбца. Предоставив аргумент dtype в readCSV, количество вызовов функций для определения типа уменьшилось, что привело к небольшому ускорению. Это также видно из профиля.

Профиль до оптимизации Top function calls in unoptimized read_csv

Профиль после оптимизации Top function calls after providing the dtype argument for most columns

Существуют ли другие способы оптимизации, основанные на том, что я знаю о данных, которые я могу использовать для более быстрой загрузки?

1 Ответ

0 голосов
/ 10 марта 2020

Если у вас хватит терпения загрузить данные один раз, то вы можете сохранить их в другом формате, например parquet или feather, что будет быстрее для повторной загрузки позже.

Другой вариант проверить это dask библиотека.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...