我真的不知道如何解决此错误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)
答案 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转换,然后再将它们链接在一起。