TypeError: kan de reeks niet converteren naar <class ‘float’>

Ik heb een dataframe (df) dat eruitziet als:

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

Voor de hele tijdreeks probeer ik de waarde van vandaag te delen door gisteren en het resultaat te loggen met het volgende:

df["B"] = math.log(df["A"] / df["A"].shift(1))

Ik krijg echter de volgende foutmelding:

TypeError: cannot convert the series to <class 'float'>

Hoe kan ik dit oplossen? Ik heb geprobeerd als float te casten met:

df["B"] .astype(float)

Maar kan niets werkend krijgen.


Antwoord 1, autoriteit 100%

Je kunt in plaats daarvan numpy.log gebruiken. Math.log verwacht een enkel getal, geen array.


Antwoord 2, autoriteit 33%

U kunt de lambda-operator gebruiken om uw functies toe te passen op het gegevensframe van panda’s of op de reeks. Meer specifiek, als je elk element op een kolom wilt converteren naar een getal met drijvende komma, moet je het als volgt doen:

df['A'].apply(lambda x: float(x))

hier zal de lambda-operator de waarden in die kolom nemen (als x) en ze teruggeven als een zwevende waarde.


Antwoord 3, autoriteit 2%

Als je gewoon df["A"].astype(float)schrijft, verander je dfniet. U zou de uitvoer van de astype-methodeaanroep aan iets anders moeten toewijzen, inclusief aan de bestaande reeks met behulp van df['A'] = df['A'].astype(float). Misschien wil je ook numpy gebruiken zoals @user3582076 suggereert, of .applyop de Series die het resultaat is van het delen van de waarde van vandaag door die van gisteren.


Antwoord 4

Ik had hetzelfde probleem, voor mij was het antwoord om te kijken naar de reden waarom ik series had. Na lang zoeken naar het veranderen van de reeks in het andere toegewezen gegevenstype, realiseerde ik me dat ik dezelfde kolomnaam twee keer in het dataframe had gedefinieerd en dat ik daarom een reeks had.

Als u de onbedoelde verdubbeling van de kolomnaam verwijdert, wordt dit probleem opgelost 🙂


Antwoord 5

Ik heb het op een andere manier gebruikt, maar het is hetzelfde als @cemosambora

(df.A).apply(lambda x: float(x))
Hier is dfhet panda-dataframe en Ais een kolomnaam

Other episodes