Як виправити: дані pandas перетворюються на тип об’єкта numpy. перевірте вхідні дані за допомогою 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

#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

Тепер припустімо, що ми намагаємося підібрати модель множинної лінійної регресії, використовуючи команду, результативні передачі та підбирання як змінні прогностики та очки як змінну відповіді :

 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

#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

Значення в стовпці «команда» були перетворені з «A» і «B» на 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                            
==================================================== ============================
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.
==================================================== ============================

Зверніть увагу, що цього разу ми можемо підігнати регресійну модель без будь-яких помилок.

Примітка . Ви можете знайти повну документацію для функції ols() у бібліотеці statsmodels тут .

Додаткові ресурси

У наступних посібниках пояснюється, як виправити інші типові помилки в Python:

Як виправити KeyError у Pandas
Як виправити: ValueError: неможливо перетворити float NaN на int
Як виправити: ValueError: операнди не можна транслювати з фігурами

Додати коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *