J'ai un dataframe (df) qui ressemble à:
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
Pour toute la série chronologique, j'essaie de diviser la valeur d'aujourd'hui par celle d'hier et de consigner le résultat à l'aide des éléments suivants:
df["B"] = math.log(df["A"] / df["A"].shift(1))
Cependant, j'obtiens l'erreur suivante:
TypeError: cannot convert the series to <class 'float'>
Quelqu'un pourrait-il me dire comment résoudre ce problème s'il vous plaît? J'ai essayé de lancer comme float en utilisant:
df["B"] .astype(float)
Mais rien ne peut fonctionner. Toute orientation serait très appréciée.
Merci
Vous pouvez utiliser numpy.log à la place. Math.log attend un nombre unique, pas un tableau.
Si vous écrivez simplement df["A"].astype(float)
, vous ne changerez pas df
. Vous devez affecter la sortie de l'appel de méthode astype
à quelque chose d'autre, y compris à la série existante à l'aide de df['A'] = df['A'].astype(float)
. Vous pouvez également utiliser numpy comme le suggère @ user3582076 ou utiliser .apply
sur la série résultant de la division de la valeur d'aujourd'hui par celle d'hier.