用于线性回归的pandas数据帧转换

时间:2015-04-30 18:39:48

标签: python pandas dataframe regression

我读取了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

1 个答案:

答案 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)