dataframe dask cómo convertir la columna a to_datetime

Estoy tratando de convertir una columna de mi dataframe a datetime. Siguiendo la discusión aquí https://github.com/dask/dask/issues/863 Intenté el siguiente código:

import dask.dataframe as dd df['time'].map_partitions(pd.to_datetime, columns='time').compute() 

Pero estoy recibiendo el siguiente mensaje de error

 ValueError: Metadata inference failed, please provide `meta` keyword 

¿Qué exactamente debo poner bajo meta? ¿Debo poner un diccionario de TODAS las columnas en df o solo de la columna ‘tiempo’? y que tipo debo poner? He intentado dtype y datetime64 pero ninguno de ellos funciona hasta ahora.

Gracias y aprecio su orientación,

Actualizar

Incluiré aquí los nuevos mensajes de error:

1) Usando la marca de tiempo

 df['trd_exctn_dt'].map_partitions(pd.Timestamp).compute() TypeError: Cannot convert input to Timestamp 

2) Usando datetime y meta

 meta = ('time', pd.Timestamp) df['time'].map_partitions(pd.to_datetime,meta=meta).compute() TypeError: to_datetime() got an unexpected keyword argument 'meta' 

3) Solo usando la fecha y hora: se atasca al 2%

  In [14]: df['trd_exctn_dt'].map_partitions(pd.to_datetime).compute() [ ] | 2% Completed | 2min 20.3s 

Además, me gustaría poder especificar el formato en la fecha, como lo haría en pandas:

 pd.to_datetime(df['time'], format = '%m%d%Y' 

Actualización 2

Después de actualizar a Dask 0.11, ya no tengo problemas con la palabra clave meta. Aún así, no puedo pasar del 2% en un dataframe de 2GB.

 df['trd_exctn_dt'].map_partitions(pd.to_datetime, meta=meta).compute() [ ] | 2% Completed | 30min 45.7s 

Actualización 3

Funcionó mejor de esta manera:

 def parse_dates(df): return pd.to_datetime(df['time'], format = '%m/%d/%Y') df.map_partitions(parse_dates, meta=meta) 

No estoy seguro de si es el enfoque correcto o no

Usar astype

Puede usar el método astype para convertir el dtype de una serie a un dtype NumPy

 df.time.astype('M8[us]') 

Probablemente haya una forma de especificar también un tipo de estilo Pandas (ediciones bienvenidas)

Usa map_partitions y meta

Cuando se usan métodos de caja negra como map_partitions , dask.dataframe necesita saber el tipo y los nombres de la salida. Hay algunas formas de hacerlo enumeradas en la cadena de map_partitions para map_partitions .

Puede suministrar un objeto Pandas vacío con el tipo y el nombre correctos

 meta = pd.Series([], name='time', dtype=pd.Timestamp) 

O puede proporcionar una tupla de (name, dtype) para una serie o un dict para un DataFrame

 meta = ('time', pd.Timestamp) 

Entonces todo debería estar bien

 df.time.map_partitions(pd.to_datetime, meta=meta) 

Si estuvieras llamando map_partitions en df , deberías proporcionar los dtypes para todo. Pero ese no es el caso en tu ejemplo.

No estoy seguro de si este es el enfoque correcto, pero mapear la columna funcionó para mí:

 df['time'] = df['time'].map(lambda x: pd.to_datetime(x, errors='coerce')) 

Esto funciono para mi

ddf["Date"] = ddf["Date"].map_partitions(pd.to_datetime,format='%d/%m/%Y',meta = ('datetime64[ns]'))