データフレームがあり、列内の行のサブセットに対して指数計算を実行したいと思います。私は3つのバージョンのコードを試しましたが、そのうちの2つは機能しました。しかし、なぜ1つのバージョンでエラーが発生するのか理解できません。
import numpy as np
バージョン1(動作中)
np.exp(test * 1.0)
バージョン2(動作中)
np.exp(test.to_list())
バージョン3(エラー)
np.exp(test)
以下のエラーが表示されます。
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
テストデータは次の方法で生成されます。
test = pd.loc[(pd['a'] > 0) & (pd['a'] < 650), 'a']
テスト中のデータは次のとおりです。
0 600
2 600
42 600
43 600
47 600
60 600
67 600
Name: a, dtype: Int64
そしてそのデータ型は:
<class 'pandas.core.series.Series'>
ただし、ダミーのデータセットを生成しようとすると、機能します。
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'])
なぜこのエラーが表示されるのですか?どうもありがとうございました。
私はあなたの投稿を見ただけで答えたいと思います。
あなたの問題は、いくつかの派手な関数がfloat型引数を明示的に必要とするために発生すると思いますが、np.exp(test)
は、引数にintデータを入れます。
解決策は次のとおりです。
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)
動作するかどうか確認しますか?お役に立てれば幸いです。