Problemlösung: pandas-daten werden in den objekttyp numpy konvertiert. überprüfen sie die eingabedaten mit np.asarray(data).
Ein Fehler, der bei der Verwendung von Python auftreten kann, ist:
ValueError : Pandas data cast to numpy dtype of object. Check input data with
np.asarray(data).
Dieser Fehler tritt auf, wenn Sie versuchen, ein Regressionsmodell in Python anzupassen und die kategorialen Variablen vor der Anpassung des Modells nicht in Dummy-Variablen konvertieren können.
Das folgende Beispiel zeigt, wie dieser Fehler in der Praxis behoben werden kann.
So reproduzieren Sie den Fehler
Angenommen, wir haben den folgenden Pandas-DataFrame:
import pandas as pd
#createDataFrame
df = pd. DataFrame ({' team ': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'],
' assists ': [5, 7, 7, 9, 12, 9, 9, 4],
' rebounds ': [11, 8, 10, 6, 6, 5, 9, 12],
' points ': [14, 19, 8, 12, 17, 19, 22, 25]})
#view DataFrame
df
team assists rebounds points
0 A 5 11 14
1 To 7 8 19
2 A 7 10 8
3 to 9 6 12
4 B 12 6 17
5 B 9 5 19
6 B 9 9 22
7 B 4 12 25
Nehmen wir nun an, wir versuchen, ein multiples lineares Regressionsmodell anzupassen, indem wir Team, Assists und Rebounds als Prädiktorvariablen und Punkte als Antwortvariable verwenden :
import statsmodels. api as sm
#define response variable
y = df['points']
#define predictor variables
x = df[['team', 'assists', 'rebounds']]
#add constant to predictor variables
x = sm. add_constant (x)
#attempt to fit regression model
model = sm. OLS (y,x). fit ()
ValueError : Pandas data cast to numpy dtype of object. Check input data with
np.asarray(data).
Wir erhalten eine Fehlermeldung, weil die Variable „team“ kategorisch ist und wir sie vor der Anpassung des Regressionsmodells nicht in eine Dummy-Variable konvertiert haben.
So beheben Sie den Fehler
Der einfachste Weg, diesen Fehler zu beheben, besteht darin, die Variable „team“ mithilfe der Funktion pandas.get_dummies() in eine Dummy-Variable umzuwandeln.
Hinweis : Schauen Sie sich dieses Tutorial an, um eine kurze Auffrischung der Dummy-Variablen in Regressionsmodellen zu erhalten.
Der folgende Code zeigt, wie man „team“ in eine Dummy-Variable umwandelt:
import pandas as pd
#createDataFrame
df = pd. DataFrame ({' team ': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'],
' assists ': [5, 7, 7, 9, 12, 9, 9, 4],
' rebounds ': [11, 8, 10, 6, 6, 5, 9, 12],
' points ': [14, 19, 8, 12, 17, 19, 22, 25]})
#convert "team" to dummy variable
df = pd. get_dummies (df, columns=[' team '], drop_first= True )
#view updated DataFrame
df
assists rebounds points team_B
0 5 11 14 0
1 7 8 19 0
2 7 10 8 0
3 9 6 12 0
4 12 6 17 1
5 9 5 19 1
6 9 9 22 1
7 4 12 25 1
Die Werte in der Spalte „Team“ wurden von „A“ und „B“ auf 0 und 1 umgerechnet.
Wir können jetzt das multiple lineare Regressionsmodell mithilfe der neuen Variablen „team_B“ anpassen:
import statsmodels. api as sm
#define response variable
y = df['points']
#define predictor variables
x = df[['team_B', 'assists', 'rebounds']]
#add constant to predictor variables
x = sm. add_constant (x)
#fit regression model
model = sm. OLS (y,x). fit ()
#view summary of model fit
print ( model.summary ())
OLS Regression Results
==================================================== ============================
Dept. Variable: R-squared points: 0.701
Model: OLS Adj. R-squared: 0.476
Method: Least Squares F-statistic: 3.119
Date: Thu, 11 Nov 2021 Prob (F-statistic): 0.150
Time: 14:49:53 Log-Likelihood: -19.637
No. Observations: 8 AIC: 47.27
Df Residuals: 4 BIC: 47.59
Df Model: 3
Covariance Type: non-robust
==================================================== ============================
coef std err t P>|t| [0.025 0.975]
-------------------------------------------------- ----------------------------
const 27.1891 17.058 1.594 0.186 -20.171 74.549
team_B 9.1288 3.032 3.010 0.040 0.709 17.548
assists -1.3445 1.148 -1.171 0.307 -4.532 1.843
rebounds -0.5174 1.099 -0.471 0.662 -3.569 2.534
==================================================== ============================
Omnibus: 0.691 Durbin-Watson: 3.075
Prob(Omnibus): 0.708 Jarque-Bera (JB): 0.145
Skew: 0.294 Prob(JB): 0.930
Kurtosis: 2.698 Cond. No. 140.
==================================================== ============================
Beachten Sie, dass wir dieses Mal das Regressionsmodell fehlerfrei anpassen können.
Hinweis : Die vollständige Dokumentation für die Funktion ols() finden Sie hier in der statsmodels-Bibliothek.
Zusätzliche Ressourcen
Die folgenden Tutorials erklären, wie Sie andere häufige Fehler in Python beheben:
So beheben Sie KeyError in Pandas
So beheben Sie: ValueError: Float NaN kann nicht in int konvertiert werden
So beheben Sie: ValueError: Operanden konnten nicht mit Formen übertragen werden