我读取了CSV文件并获取了一个包含几列的数据帧(名称:数据),前几个列格式为数字long(类型:pandas.core.series.Series)和最后一列(标签)是二元响应变量字符串' P(ass)' F(ail)'
import statsmodels.api as sm
label = data.ix[:, -1]
label[label == 'P'] = 1
label[label == 'F'] = 0
fea = data.ix[:, 0: -1]
logit = sm.Logit(label, fea)
result = logit.fit()
print result.summary()
Pandas抛出这个错误信息:" ValueError:Pandas数据被转换为numpy dtype的对象。使用np.asarray(数据)" 检查输入数据 Numpy,Pandas等模块已经导入。我试图将fea列转换为float但仍然没有通过。有人能告诉我如何纠正吗? 感谢
更新:
data.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 500 entries, 68135 to 3002
Data columns (total 8 columns):
TestQty 500 non-null int64
WaferSize 500 non-null int64
ChuckTemp 500 non-null int64
Notch 500 non-null int64
ORIGINALDIEX 500 non-null int64
ORIGINALDIEY 500 non-null int64
DUTNo 500 non-null int64
PassFail 500 non-null object
dtypes: int64(7), object(1)
memory usage: 35.2+ KB
data.sum()
TestQty 530
WaferSize 6000
ChuckTemp 41395
Notch 135000
ORIGINALDIEX 12810
ORIGINALDIEY 7885
DUTNo 271132
PassFail 20
dtype: float64
答案 0 :(得分:0)
你的功能不应该是这样的:
fea = data.ix[:, 0:-1]
根据您的数据,您可以看到,在转换“P&#39; P&#39;之前,PassFail总和为20到1和&#39; F&#39;为零。我相信这是你错误的根源。
要查看其中的内容,请尝试:
data.PassFail.unique()
要验证它总计为500(DataFrame中的行数):
sum(label[label == 0]) + sum(label[label == 1)
最后,尝试将值传递给函数而不是Series和DataFrames:
logit = sm.Logit(label.values, fea.values)