2017-03-01 1 views
1

Das folgende Skript läuft unter Linux einwandfrei (Mint 18.1).Pandas: Skript zur Berechnung des linearen Modellkoeffizienten läuft unter Linux, aber nicht unter Windows 10

Die Funktion erstellt ein Array "Y" des monatlichen Umsatzes und entfernt die Nan-Werte aus dem Array. Es erstellt dann ein numpy.arange-Array "X", das von 1 bis zur Länge von Y geht. Es erstellt dann ein lineares Modell basierend auf X und Y und berechnet den Koeffizienten.

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) 

Das exakt gleiche Skript verursacht den folgenden Fehler auf 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 

ich voll aufgerüstet Anaconda 3 in beiden Fällen verwende. Weiß jemand, warum dies passiert und wie man das Skript ändert, um den Fehler unter Windows zu vermeiden?

Antwort

2

Aus einigen Tests, die ich gemacht habe, gibt die .coef_ ein numpy Array zurück, das einige truble verursacht. Ändern der folgenden Zeile funktioniert, ich bin nur nicht sicher, das Ergebnis ist, was Sie wollen.

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

Schöne Workaround, habe nicht daran gedacht. Immer noch nicht sehen, was das OS damit zu tun hat. – Duudsrednaz

+0

Ich habe keine richtige Linux-Maschine oder virtuelle Maschine zum Testen. Aber ich kann mir keinen Grund vorstellen, warum Linux das Problem verursacht. Vielleicht kannst du die Panda- und Sklearn-Versionen überprüfen? – gepcel

+0

Ich habe "Conda Update --all" auf beiden gemacht, aber ich werde es noch einmal überprüfen, wenn ich zu Hause bin. In jedem Fall gibt _.coef_ [0] das richtige Ergebnis. – Duudsrednaz

Verwandte Themen