es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo convertir las columnas de objetos de Dask en columnas decimales.

Tengo esta función

def dec(x):
    """Convertir a Decimal y quitar el exponente y los ceros finales"""
    if not x:
        return Decimal(0)
    if not isinstance(x, Decimal):
        x = Decimal(str(x))
    return x.quantize(Decimal(1)) if x == x.to_integral() else x.normalize()

En pandas, lo haría así

df['price'].apply(dec)

Sin embargo, dask no soporta esto, entonces ¿cuál es otra forma de convertir una columna en tipo decimal?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Una forma de convertir una columna al tipo decimal en Dask es utilizar el método map() en lugar de apply(). Aquí tienes un ejemplo:

    from dask import dataframe as dd
    from decimal import Decimal
    
    # Crear un dataframe de ejemplo
    data = {'price': [1.2345, 2.3456, 3.4567]}
    df = dd.from_pandas(pd.DataFrame(data), npartitions=1)
    
    # Definir la función dec()
    def dec(x):
        """Convertir a Decimal y eliminar el exponente y los ceros finales"""
        if not x:
            return Decimal(0)
        if not isinstance(x, Decimal):
            x = Decimal(str(x))
        return x.quantize(Decimal(1)) if x == x.to_integral() else x.normalize()
    
    # Utilizar map() para aplicar dec() a la columna 'price'
    df['price'] = df['price'].map(dec, meta=('price', 'O'))
    
    # Mostrar el resultado
    print(df.compute())
    

    Esto producirá la siguiente salida:

       price
    0  1.2345
    1  2.3456
    2  3.4567
    

    Ten en cuenta que necesitamos especificar el parámetro meta para asegurarnos de que el dataframe de salida tenga el tipo de dato correcto (Decimal). Además, recuerda que map() devuelve un nuevo dataframe de Dask, por lo que necesitamos asignarlo de nuevo al dataframe original. Por último, llamamos a compute() para ejecutar el cálculo y obtener el resultado final.

Comments are closed.