数组长度与索引长度不匹配

时间:2018-07-27 04:16:51

标签: python python-3.x pandas

我真的不知道如何解决此错误array length 488 does not match index length 9914。我认为这与我定义数据框的方式有关,但是我真的找不到问题所在。

我的代码是:

   train_df.drop(['key','passenger_count','dropoff_longitude','dropoff_latitude','pickup_longitude','pickup_latitude','pickup_datetime'],axis=1,inplace=True)
test_df.drop(['passenger_count','dropoff_longitude','dropoff_latitude','pickup_longitude','pickup_latitude','pickup_datetime'],axis=1,inplace=True)

train_df.dropna(how = 'any', axis = 'rows', inplace=True)
train_df.isnull().sum()

y = train_df.pop('fare_amount')
x = train_df
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=42)
dtrain = xgb.DMatrix(x_train, label=y_train)
dtest = xgb.DMatrix(x_test, label=y_test)
param = {
    'max_depth':5,
    'nthread':4,
    'eval_metric': 'rmse',
    'min_child_weight': 1,
    'eta':0.3
}
model = xgb.train(param, dtrain)
pred = model.predict(dtest, ntree_limit=model.best_ntree_limit)
submission = pd.DataFrame({"key":test_df["key"], "fare_amount": pred},
                         columns = ['key', 'fare_amount']

错误发生在submission所在的最后一行,并且回溯如下:

ValueError                                Traceback (most recent call last)
<ipython-input-193-1cb42e5ec957> in <module>()
     57 pred = model.predict(dtest, ntree_limit=model.best_ntree_limit)
     58 submission = pd.DataFrame({"key":test_df["key"], "fare_amount": pred},

ValueError: array length 488 does not match index length 9914

两个数据集都从相同的列开始,但是test.csv没有fare_amount

在放置任何列之前,test.csv的形状为(9914,8),而train.csv具有(3034,9)

2 个答案:

答案 0 :(得分:1)

为解决此问题,我添加了一个新变量x_predict = test_df.drop("key", axis=1),然后将其添加到prediction = model.predict(xgb.DMatrix(x_pred), ntree_limit = model.best_ntree_limit)

答案 1 :(得分:0)

您正在使用数据集“ dtest”进行预测,该数据集是train_df的子集。而test_df是一个单独的数据集。

即使test_df和pred的长度相同,它们也是2个不同的数据集,除非 test_df = train_df

,否则将它们链接起来毫无意义。

即使它们相似,也需要在test_df上进行与在train_df上相同的DataFrame转换,然后再将它们链接在一起。