J'ai une trame de données et je voudrais effectuer un calcul exponentiel sur un sous-ensemble de lignes dans une colonne. J'ai essayé trois versions de code et deux d'entre elles ont fonctionné. Mais je ne comprends pas pourquoi une version me donne l'erreur.
import numpy as np
Version 1 (fonctionne)
np.exp(test * 1.0)
Version 2 (fonctionne)
np.exp(test.to_list())
Version 3 (erreur)
np.exp(test)
Il montre l'erreur ci-dessous:
AttributeError Traceback (most recent call last)
AttributeError: 'int' object has no attribute 'exp'
The above exception was the direct cause of the following exception:
TypeError Traceback (most recent call last)
<ipython-input-161-9d5afc93942c> in <module>()
----> 1 np.exp(pd_feature.loc[(pd_feature[col] > 0) & (pd_feature[col] < 700), col])
TypeError: loop of ufunc does not support argument 0 of type int which has no callable exp method
Les données de test sont générées par:
test = pd.loc[(pd['a'] > 0) & (pd['a'] < 650), 'a']
Les données testées sont simplement:
0 600
2 600
42 600
43 600
47 600
60 600
67 600
Name: a, dtype: Int64
et son type de données est:
<class 'pandas.core.series.Series'>
Cependant, si j'essaie de générer un jeu de données factice, cela fonctionne:
data = {'a':[600, 600, 600, 600, 600, 600, 600], 'b': ['a', 'a', 'a', 'a', 'a', 'a', 'a']}
df = pd.DataFrame(data)
np.exp(df.loc[:,'a'])
Une idée de pourquoi je vois cette erreur? Merci beaucoup.
Je viens de voir votre message et je voudrais répondre.
Je suppose que votre problème se produit car certaines fonctions numpy nécessitent float type explicite, alors que votre utilisation du code comme np.exp(test)
place int données dans l'argument.
La solution pourrait être:
import numpy as np
your_array = your_array.float()
output = np.exp(your_array)
# OR
def exp_test(x)
x.float()
return np.exp(x)
output = exp_test(your_array)
Pourriez-vous vérifier si cela vous convient? Je serais ravi de vous aider.