pd.read_csv, а затем pd.concat параллельно для нескольких текстовых файлов - PullRequest
0 голосов
/ 26 сентября 2018

Я не могу найти что-то конкретно для этого и, кажется, не могу получить какую-либо комбинацию из dask или пула, чтобы делать то, что мне нужно, без ошибки.

Мне нужно прочитать дюжину или более текстовых данныхфайлы (в четырех папках с использованием рекурсии) с определенным соглашением об именах, а затем объединить их все вместе.Все файлы имеют одинаковые имена столбцов, но каждый файл имеет разную длину.

Вот как я могу сделать это сейчас и заставить его работать, но хочу работать параллельно:

 path1 = my specific filepath

 file_list = glob.glob(os.path.join(path1, "*\\XT*.txt"), recursive = 
             True)

 df_each = (pd.read_csv(f, sep = '|') for f in file_list)

 df = pd.concat(df_each, ignore_index = True)

ТогдаВот несколько мелочей, которые нужно очистить и изменить, которые я сделал следующим образом:

 df.replace{("#":""}, regex = True, inplace = True

 df.columns = df.columns.str.replace("#", "")

Конечная цель того, что мне нужно для всех файлов, - это сводка суммы для каждого столбца, котораяспециально сгруппированы, что делается следующим образом:

 df_calc = df.groupby(['Name1', 'Name2']).sum()

В настоящий момент для запуска требуется около 30 минут, а для сокращения этого времени требуется параллельная работа.Спасибо!

1 Ответ

0 голосов
/ 26 сентября 2018

Вы упоминаете в комментарии, что загрузка вашего процессора низкая, а не около 100%.Это означает, что вы ограничены пропускной способностью диска или пропускной способностью памяти.Поэтому назначение большего количества процессорных ядер для выполнения этой задачи только замедлит ее.Вместо этого вам следует сосредоточиться на сокращении ввода-вывода и потребления памяти.

Использование опции usecols в pd.read_csv() - отличное начало.Кроме того, попробуйте передать engine='c' и явное dtype, чтобы Pandas не приходилось каждый раз угадывать dtype.

Вам также может пригодиться SSD.

Вам также следует подумать о сохранении своегоданные в более эффективном формате.Например формат производства np.save() и друзей.Это может ускорить загрузку в 100 раз.

...