2017-03-01 4 views
1

次のスクリプトはLinux(Mint 18.1)で正常に動作します。パンダ:リニアモデルの係数を計算するスクリプトはLinuxでは正常に動作しますが、Windowsでは動作しません

この関数は、月間売上高の配列 "Y"を作成し、配列からnan値を削除します。次に、numpy.arange配列 "X"を作成します。これは1からYの長さになります。 次に、XとYに基づいて線形モデルを作成し、係数を計算します。

import pandas as pd 
import numpy as np 
from io import StringIO 
from sklearn import linear_model as lm 

data= 
'''Fruit jan feb mar apr may jun jul aug sep oct nov dec 
Apples nan nan nan 600 550 620 nan nan 300 100 200 50 
Bananas 740 720 780 700 250 140 20 nan nan nan nan nan 
Kiwis  nan nan nan nan 400 550 nan 500 nan 40 50 nan 
Oranges nan 300 350 300 400 500 nan nan nan nan nan nan 
Grapes 150 200 250 200 50 50 40 35 30 20 10 nan''' 

def coefficient(row): 
    y = np.array(row['jan':'dec'].astype(float)) 
    y = np.nan_to_num(y) 
    y = y[y != 0] 
    x = np.arange(1,len(y)+1).reshape(len(y),1) 
    return lm.LinearRegression().fit(x,y).coef_ 

df   = pd.read_csv(StringIO(data),delimiter='\s+') 
df['COEF'] = df.apply(coefficient,axis=1) 

これとまったく同じスクリプトは、私は両方のケースで完全にアップグレードアナコンダ3を使用していますWindowsの10

File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\internals.py", line 109, in __init__ 
len(self.mgr_locs))) 

ValueError: Wrong number of items passed 13, placement implies 1 

に次のエラーが発生します。なぜこのようなことが起こるのか、またWindowsでのエラーを回避するためにスクリプトを変更する方法を知っていますか?

答えて

2

私が作ったいくつかのテストから、.coef_はいくつかの真理を引き起こすnumpy配列を返します。次の行を変更すると、結果はあなたが望むものであるか分かりません。

return lm.LinearRegression().fit(x,y).coef_[0] 
+0

解決策がいいとは思わなかった。それでもOSが何をしなければならないかは分かりません。 – Duudsrednaz

+0

テストするのに適切なLinuxマシンまたは仮想マシンがありません。しかし、私はLinuxがこの問題を引き起こす理由を考えることはできません。たぶんあなたはパンダとSklearnのバージョンをチェックできますか? – gepcel

+0

私は "conda update --all"を両方でやったことがありますが、私が帰ったらもう一度チェックします。どちらの方法でも_.coef_ [0]は正しい結果を返します。 – Duudsrednaz

関連する問題