2017-11-09 21 views
1

sklearn.LinearRegressionを使用して1トンの短い系列のログ勾配を探しようとしています。データは、パンダのデータフレームの列から引き出され、のように見えるされている:AttributeError: 'numpy.float64'オブジェクトに 'log10'属性がありません

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 

しかし、私はシリーズで、np.log10を使用しようとすると、私は次のエラーを取得:

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' 

を私はなぜこのエラーが発生しているのか分かりませんが、np.log10は私が見ているものからnumpy.float64で動作するはずです。アイデア?

+1

これを試してください: 'test.apply(lambda x:np.log10(x))' – pault

+0

テストはpdseriesです。適用は一連の各値を渡す必要がありますが、np.log10コマンドは正しく機能しますか? – WolVes

+1

[この質問](https://stackoverflow.com/questions/46995041/why-does-this-array-has-no-attribute-log10)が重複しているかどうかを確認してください。 –

答えて

2

numpy.log10np.log10(test)に相当test.apply(log10)なるnumpyのufuncsのための特別な試験を有するSeries.apply(func)「ufunc」、および方法です。つまり、test、Pandas Seriesインスタンスはlog10に渡されます。 testのデータ型はobjectです。つまり、testの要素は任意のPythonオブジェクトになります。 np.log10は、そのようなオブジェクトのコレクションを処理する方法を知らない(実際にはすべてnp.float64のインスタンスであることを「認識」していない)ので、計算をSeriesの個々の要素にディスパッチしようとします。そのためには、要素自身がlog10メソッドを持つことが必要です。エラーが発生したとき:Series(この場合はnp.float64のインスタンス)の要素にはlog10メソッドがありません。

好きなことをする必要があるカップルの代替式は、np.log10(test.astype(np.float64))またはtest.astype(np.float64).apply(np.log10)です。本質的な部分は、test.astype(np.float64)が、オブジェクトのデータ型をobjectからnp.float64に変換することです。

関連する問題