Добавить значение в столбец фреймов данных DASK, импортированных с помощью csv_read - PullRequest
0 голосов
/ 25 февраля 2019

Предположим, что пять файлов импортированы в DASK с использованием csv_read.Для этого я использую этот код:

import dask.dataframe as dd
data = dd.read_csv(final_file_list_msg, header = None)

Каждый файл имеет десять столбцов.Я хочу добавить 1 к первому столбцу файла 1, 2 к первому столбцу файла 2, 3 к первому столбцу файла 3 и т. Д.

1 Ответ

0 голосов
/ 26 февраля 2019

Предположим, у вас есть несколько файлов по этой схеме:

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])
...