AttributeError: 'numpy.float64' objet n'a pas d'attribut "log10'
J'essaie de trouver le journal de la pente d'une tonne de courtes séries à l'aide de sklearn.LinearRegression. Les données sont extraites à partir des lignes de pandas dataframe et ressemble:
bp01 1.12
bp02 1.12
bp03 1.08
bp04 0.99
bp05 1.08
bp06 1.19
bp07 1.17
bp08 1.05
bp09 0.8
bp10 0.96
bp11 0.97
bp12 1.12
bp13 0.91
bp14 0.96
bp15 1.05
bp16 0.93
bp17 0.97
bp18 0.92
bp19 0.89
bp20 0
Name: 42029, dtype: object
Cependant, lorsque je tente de l'utiliser np.log10, sur la série, j'obtiens l'erreur suivante:
In[27]: test.apply(np.log10)
Traceback (most recent call last):
File "<ipython-input-27-bccff3ed525b>", line 1, in <module>
test.apply(np.log10)
File "C:\location", line 2348, in apply
return f(self)
AttributeError: 'numpy.float64' object has no attribute 'log10'
Je ne suis pas sûr pourquoi cette erreur est levée, np.log10 devrait travailler avec numpy.float64 de ce que je vois. Des idées?
- Essayez ceci:
test.apply(lambda x: np.log10(x))
- test est un pd.série bien. Appliquer devrait passer chaque valeur de la série de la np.log10 commande si le droit?
- Voir si cette question est un doublon.
- Vous avez appelé une variable de type float
np
.
Vous devez vous connecter pour publier un commentaire.
numpy.log10
est un "ufunc", et la méthodeSeries.apply(func)
a un test spécial pour numpy ufuncs qui rendtest.apply(log10)
équivalent ànp.log10(test)
. Cela signifietest
, une PandasSeries
exemple, est passé àlog10
. Le type de données detest
estobject
, ce qui signifie que les éléments entest
peut être arbitraire des objets Python.np.log10
ne sait pas comment gérer une telle collection d'objets (il ne sait pas que ces objets sont, en fait, tous lesnp.float64
cas), afin qu'il tente de l'envoi de ce calcul pour les éléments individuels dans leSeries
. Pour ce faire, il attend que les éléments eux-mêmes pour avoir unlog10
méthode. C'est lorsque l'erreur se produit: les éléments de laSeries
(dans ce cas,np.float64
cas) n'ont pas delog10
méthode.Un couple d'expression alternative qui devrait faire ce que vous voulez sont
np.log10(test.astype(np.float64))
outest.astype(np.float64).apply(np.log10)
. L'essentiel est quetest.astype(np.float64)
convertit le type de données de laSeries
objet deobject
ànp.float64
.J'ai eu un message d'erreur similaire lors de l'utilisation de l'écart-type (np.mst) au lieu de np.log10:
et ce bien que j'avais déjà converti les Pandas de l'objet X à un tableau numpy par
np.asarray(X)
.Je pourrais résoudre ce problème en appliquant la solution mentionnée ci-dessus: