Agregue un valor a una columna de marcos de datos DASK importados usando csv_read

Supongamos que se importan cinco archivos a la DASK utilizando csv_read . Para ello, utilizo este código:

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

Cada archivo tiene diez columnas. Quiero agregar 1 a la primera columna del archivo 1, 2 a la primera columna del archivo 2, 3 a la primera columna del archivo 3, etc.

Supongamos que tiene varios archivos siguiendo este esquema:

 dummy/ ├── file01.csv ├── file02.csv ├── file03.csv 

Primero los creamos vía

 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) 

La lista de archivos creados es fns = sorted(os.listdir(fldr))

Luego escribimos una función que dada la ruta fn :

  • lee el archivo
  • toma el numero XX en el fileXX.csv
  • inserte int(XX) en la primera columna

Es decir

 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 

Queríamos que se delayed esta diversión y podemos lograrla utilizando el decorador @delayed o envolviendo la función con delayed . Así que para obtener la salida deseada debemos disparar (en consecuencia)

  • ddf = dd.from_delayed([addCol(fn) for fn in fns])
  • ddf = dd.from_delayed([delayed(addCol)(fn) for fn in fns])