TypeError:不能对<class'pandas.core.indexes.numeric.int64index'=“”>进行切片索引,这些索引器[0.0]为<class'float'=“”>

时间:2017-11-01 12:46:36

标签: python cross-validation

我尝试分类收入&lt; = 50k或&gt; 50k并编写交叉验证函数以获得每个准确度

X = df[['age','workclass','fnlwgt','education','marital_status','occupation','relationship','race','sex']]
y = df['income']
k_fold = 10


def k_fold_generator(X, y, k_fold):
subset_size = len(X) / k_fold  
for k in range(k_fold):
    X_train = X[:k * subset_size] + X[(k + 1) * subset_size:]
    X_test = X[k * subset_size:][:subset_size]
    y_train = y[:k * subset_size] + y[(k + 1) * subset_size:]
    y_test = y[k * subset_size:][:subset_size]

    yield X_train, y_train, X_test, y_test

以上是好的

但在

for X_train, y_train, X_test, y_test in k_fold_generator(X, y, k_fold):
        print("Error")

TypeError:无法对切片建立索引 &#34; class&#39; pandas.core.indexes.numeric.Int64Index&#39;&#34;这些索引器[0.0]的 &#34; class&#39; float&#39;&#34;

1 个答案:

答案 0 :(得分:1)

subset_size是一个浮点数。

正是错误消息告诉您的原因,正是切片(预期整数)不起作用的原因。在尝试高级任务之前,我建议您通过快速,基本的Python教程。 :)

据推测,你碰巧遇到了Python 2中的一些示例代码,其中默认的除法行为是整数除法,现在尝试在Python 3.x版本中执行它。您可以尝试强制整数除法的subset_size = len(X) // k_fold。或者,您每次都可以int(round(k*subset_size))。我建议前者。

此外,由于您的训练数据X_Train似乎是正确的pandas.DataFrame,您可能不得不使用.iloc来进行显式整数切片。