Предположим, у вас есть несколько файлов по этой схеме:
dummy/
├── file01.csv
├── file02.csv
├── file03.csv
Сначала мы создадим их с помощью
import os
import pandas as pd
import numpy as np
import dask.dataframe as dd
from dask import delayed
fldr = "dummy"
if not os.path.exists(fldr):
os.mkdir(fldr)
for i in range(10):
df = pd.DataFrame(np.random.rand(5,3))
df.to_csv("{}/file{:02}.csv".format(fldr,i+1),
index=False)
Список созданных файлов: fns = sorted(os.listdir(fldr))
Затем мы пишем функцию, которая задает путь fn
:
- чтение файла
- принимает число XX в
fileXX.csv
- insert
int(XX)
в первом столбце
То есть
def addCol(fn):
df = pd.read_csv(os.path.join(fldr, fn))
first = int(fn.split(".")[0][-2:])
df.insert(0, "first", first)
return df
Мы хотели, чтобы это веселье было delayed
, и мы можем достичь его, используя декоратор @delayed
или обернув функцию с помощьюdelayed
.Таким образом, чтобы получить желаемый результат, мы должны запустить (соответственно)
ddf = dd.from_delayed([addCol(fn) for fn in fns])
ddf = dd.from_delayed([delayed(addCol)(fn) for fn in fns])