web-dev-qa-db-ja.com

numpy.expの「ufuncのループがint型の引数0をサポートしていない」エラーが発生するのはなぜですか?

データフレームがあり、列内の行のサブセットに対して指数計算を実行したいと思います。私は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'])

なぜこのエラーが表示されるのですか?どうもありがとうございました。

4
user2830451

私はあなたの投稿を見ただけで答えたいと思います。

あなたの問題は、いくつかの派手な関数が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)

動作するかどうか確認しますか?お役に立てれば幸いです。

1
Yoshiaki