Ein Fehler, auf den Sie bei der Verwendung von Python stoßen können, 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 kategoriale Variablen nicht zuerst in Dummy-Variablen konvertieren, bevor Sie das Modell anpassen.

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

#Dataframe erstellen
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]})

#Dataframe anzeigen
df

    team    assists rebounds points
0   A   5   11   14
1   A   7   8    19
2   A   7   10   8
3   A   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 mit Team, Assists und Rebounds als Prädiktorvariablen und Punkten als Antwortvariable anzupassen :

import statsmodels.api as sm

#Antwortvariable definieren
y = df['points']

#Prädiktorvariablen definieren
x = df[['team', 'assists', 'rebounds']]

# Konstante zu Prädiktorvariablen hinzufügen
x = sm.add_constant(x)

#Versuch, das Regressionsmodell anzupassen
model = sm.OLS(y, x).fit()

ValueError: Pandas data cast to numpy dtype of object. Check input data with
np.asarray(data).

Wir erhalten einen Fehler, weil die Variable „Team“ kategorial ist und wir sie vor der Anpassung des Regressionsmodells nicht in eine Dummy-Variable umgewandelt 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 zu Dummy-Variablen in Regressionsmodellen zu erhalten.

Der folgende Code zeigt, wie man „Team“ in eine Dummy-Variable umwandelt:

import pandas as pd

#Dataframe erstellen
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]})

#Konvertieren Sie "Team" in eine Dummy-Variable
df = pd.get_dummies(df, columns=['team'], drop_first=True)

#aktualisierten DataFrame anzeigen
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“ in 0 und 1 umgewandelt.

Wir können jetzt das multiple lineare Regressionsmodell mit der neuen Variablen „team_B“ anpassen:

import statsmodels.api as sm

#Antwortvariable definieren
y = df['points']

#Prädiktorvariablen definieren
x = df[['team_B', 'assists', 'rebounds']]

# Konstante zu Prädiktorvariablen hinzufügen
x = sm.add_constant(x)

#fit-Regressionsmodell
model = sm.OLS(y, x).fit()

#Zusammenfassung der Modellanpassung anzeigen
print(model.summary())

                            OLS Regression Results                            
==============================================================================
Dep. Variable:                 points   R-squared:                       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:            nonrobust                                         
==============================================================================
                 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 das Regressionsmodell diesmal ohne Fehler anpassen können.

Hinweis : Die vollständige Dokumentation für die ols()-Funktion aus der statsmodels-Bibliothek finden Sie hier .

Zusätzliche Ressourcen

Die folgenden Tutorials erklären, wie Sie andere häufige Fehler in Python beheben:

So beheben Sie KeyError in Pandas
Behebung: ValueError: Float NaN kann nicht in Integer konvertiert werden
Behebung: ValueError: Operanden konnten nicht zusammen mit Shapes übertragen werden

Statistik: Der Weg zur Datenanalyse

* Amazon Affiliate Link


Das könnte Sie auch interessieren: