Tengo un marco de datos (df) que se ve así:
date A 2001-01-02 1.0022 2001-01-03 1.1033 2001-01-04 1.1496 2001-01-05 1.1033 2015-03-30 126.3700 2015-03-31 124.4300 2015-04-01 124.2500 2015-04-02 124.8900
Para toda la serie temporal, estoy tratando de dividir el valor de hoy por el de ayer y registrar el resultado usando lo siguiente:
df["B"] = math.log(df["A"] / df["A"].shift(1))
Sin embargo me sale el siguiente error:
TypeError: cannot convert the series to <class 'float'>
¿Cómo puedo arreglar esto? He intentado lanzar como flotador usando:
df["B"] .astype(float)
Pero no puedo hacer que nada funcione.
Puede usar numpy.log en su lugar. Math.log espera un solo número, no una matriz.
Puede usar el operador lambda para aplicar sus funciones al marco de datos de pandas o a la serie. Más específicamente, si desea convertir cada elemento de una columna en un número de coma flotante, debe hacerlo así:
df['A'].apply(lambda x: float(x))
aquí el operador lambda tomará los valores en esa columna (como x) y los devolverá como un valor flotante.
Si solo escribe df["A"].astype(float)
no cambiará df
. Debería asignar la salida de la llamada al método astype
a otra cosa, incluida la serie existente usando df['A'] = df['A'].astype(float)
. También es posible que desee usar numpy como sugiere @ user3582076, o usar .apply
en la Serie que resulta de dividir el valor de hoy por el de ayer.