web-dev-qa-db-fra.com

TypeError: impossible de convertir la série en <class 'float'>

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

5
Stacey

Vous pouvez utiliser numpy.log à la place. Math.log attend un nombre unique, pas un tableau.

9
user3582076

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.

0
William Welsh