해결 방법: pandas 데이터가 numpy 개체 유형으로 변환됩니다. np.asarray(data)로 입력 데이터를 확인합니다.


Python을 사용할 때 발생할 수 있는 오류는 다음과 같습니다.

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

이 오류는 Python에서 회귀 모델을 피팅하려고 시도하고 모델을 피팅하기 전에 범주형 변수를 더미 변수 로 변환할 수 없을 때 발생합니다.

다음 예에서는 실제로 이 오류를 수정하는 방법을 보여줍니다.

오류를 재현하는 방법

다음과 같은 팬더 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).

“팀” 변수가 범주형이고 회귀 모델을 맞추기 전에 이를 더미 변수로 변환하지 않았기 때문에 오류가 발생합니다.

오류를 수정하는 방법

이 오류를 해결하는 가장 쉬운 방법은 pandas.get_dummies() 함수를 사용하여 “team” 변수를 더미 변수로 변환하는 것입니다.

참고 : 회귀 모델의 더미 변수에 대해 빠르게 복습하려면 이 튜토리얼을 확인하세요.

다음 코드는 “team”을 더미 변수로 변환하는 방법을 보여줍니다.

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

이번에는 오류 없이 회귀 모델을 맞출 수 있습니다.

참고 : 여기에서 statsmodels 라이브러리의 ols() 함수에 대한 전체 문서를 찾을 수 있습니다.

추가 리소스

다음 튜토리얼에서는 Python의 다른 일반적인 오류를 수정하는 방법을 설명합니다.

Pandas에서 KeyError를 수정하는 방법
해결 방법: ValueError: float NaN을 int로 변환할 수 없습니다.
해결 방법: ValueError: 피연산자를 모양과 함께 브로드캐스트할 수 없습니다.

의견을 추가하다

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다