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?
Schöne Workaround, habe nicht daran gedacht. Immer noch nicht sehen, was das OS damit zu tun hat. – Duudsrednaz
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
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