Как исправить: данные pandas приводятся к numpy dtype объекта. Проверьте входные данные с помощью np.asarray(data).


Одна ошибка, с которой вы можете столкнуться при использовании Python:

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

Эта ошибка возникает, когда вы пытаетесь подобрать модель регрессии в Python и не можете сначала преобразовать категориальные переменные в фиктивные переменные перед подбором модели.

В следующем примере показано, как исправить эту ошибку на практике.

Как воспроизвести ошибку

Предположим, у нас есть следующие Pandas DataFrame:

import pandas as pd

#create DataFrame
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 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

Теперь предположим, что мы пытаемся подобрать модель множественной линейной регрессии, используя команду, передачи и подборы в качестве переменных-предикторов и очки в качестве переменной ответа :

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).

Мы получаем ошибку, потому что переменная «команда» является категориальной, и мы не преобразовали ее в фиктивную переменную перед подбором регрессионной модели.

Как исправить ошибку

Самый простой способ исправить эту ошибку — преобразовать переменную «team» в фиктивную переменную с помощью функции pandas.get_dummies() .

Примечание.Ознакомьтесь с этим учебным пособием , чтобы быстро освежить в памяти фиктивные переменные в регрессионных моделях.

Следующий код показывает, как преобразовать «команду» в фиктивную переменную:

import pandas as pd

#create DataFrame
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

Значения в столбце «команда» были преобразованы из «А» и «В» в 0 и 1.

Теперь мы можем подогнать модель множественной линейной регрессии, используя новую переменную «team_B»:

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 
==============================================================================
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.
==============================================================================

Обратите внимание, что на этот раз мы можем подогнать регрессионную модель без каких-либо ошибок.

Примечание.Полную документацию по функции ols () из библиотеки statsmodels можно найти здесь .

Дополнительные ресурсы

В следующих руководствах объясняется, как исправить другие распространенные ошибки в Python:

Как исправить KeyError в Pandas
Как исправить: ValueError: невозможно преобразовать число с плавающей запятой NaN в целое число
Как исправить: ValueError: операнды не могли транслироваться вместе с фигурами

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.