Параллельный лист excel, прочитанный из dask

Привет. Все примеры использования dask, с которыми я столкнулся до сих пор, представляли собой несколько CSV-файлов в папке, которые читались с использованием вызова dask read_csv.

если мне предоставлен файл xlsx с несколькими вкладками, могу ли я использовать что-нибудь в dask для их параллельного чтения?

P.S. Я использую pandas 0.19.2 с python 2.7.


person schuler    schedule 20.06.2017    source источник
comment
Лучше всего написать функцию для чтения одной вкладки (используя идентификатор вкладки в качестве входных данных) и изучить функцию delayed dask. Вы хотите обрабатывать все вкладки как единый фрейм данных?   -  person mdurant    schedule 20.06.2017
comment
Этот блокнот может представлять интерес: gist.github.com/mrocklin/e7b7b3a65f2835cda813096332ec73ca   -  person MRocklin    schedule 21.06.2017


Ответы (2)


Для тех, кто использует Python 3.6:

#reading the file using dask
import dask
import dask.dataframe as dd
from dask.delayed import delayed

parts = dask.delayed(pd.read_excel)(excel_file, sheet_name=0, usecols = [1, 2, 7])
df = dd.from_delayed(parts)

print(df.head())

Я вижу увеличение скорости на 50% при нагрузке на машине i7, 16 ГБ 5-го поколения.

person zorze    schedule 23.11.2018
comment
К сожалению, я не вижу никаких улучшений. - person Dinh Quang Tuan; 23.05.2021

Простой пример

fn = 'my_file.xlsx'
parts = [dask.delayed(pd.read_excel)(fn, i, **other_options) 
         for i in range(number_of_sheets)]
df = dd.from_delayed(parts, meta=parts[0].compute())

Предполагая, что вы предоставляете «другие параметры» для извлечения данных (которые одинаковы для всех листов), и вы хотите сделать один основной кадр данных из набора.

Обратите внимание, что я не знаю внутренностей программы чтения Excel, поэтому неизвестно, насколько параллельна часть чтения/анализа, но последующие вычисления после того, как данные будут в памяти, определенно будут.

person mdurant    schedule 21.06.2017
comment
Привет @mdurant, спасибо за этот ответ! Вы хотели включить скобки: [parts = dask.delayed(pd.read_excel)(fn, i, **other_options) for i in range(number_of_sheets)]. - person edesz; 05.02.2019
comment
Да, я так полагаю - person mdurant; 05.02.2019
comment
И я хотел использовать parts = [dask...., а не мою опечатку [parts = dask.... - person edesz; 05.02.2019