大Pandas,怎么走pd.数据帧作为函数中的参数

2024-10-05 14:29:21 发布

您现在位置:Python中文网/ 问答频道 /正文

实际上,为了简化代码,我决定使用Dataframe作为参数的函数,而不是编写两个类似的部分代码。例如:

from sklearn.neighbors import KNeighborsRegressor
from sklearn.metrics import mean_squared_error

train_one = split_one
test_one = split_two
train_two = split_two
test_two = split_one

def train_predict(train_arg, predict_arg):
    knn = KNeighborsRegressor()
    knn.fit(train_arg['accommodates'], train_arg['price'])
    predict = knn.predict(predict_arg['accommodates'])
    rmse = numpy.sqrt(mean_squared_error(predict_arg['price'], predict))
    return rmse

iteration_one_rmse = train_predict(train_one, test_one)
iteration_two_rmse = train_predict(train_two, test_two)

avg_rmse = numpy.mean(iteration_one_rmse, iteration_two_rmse)

可能函数定义块中的参数不合适。但是,我想不通。谢谢你的提示。 错误通知如下:

ValueErrorTraceback (most recent call last)
<ipython-input-1-f3f78fcf6758> in <module>()
     14     return rmse
     15 
---> 16 iteration_one_rmse = train_predict(train_one, test_one)
     17 iteration_two_rmse = train_predict(train_two, test_two)
     18 

<ipython-input-1-f3f78fcf6758> in train_predict(train_arg, predict_arg)
      9 def train_predict(train_arg, predict_arg):
     10     knn = KNeighborsRegressor()
---> 11     knn.fit(train_arg['accommodates'], train_arg['price'])
     12     predict = knn.predict(predict_arg['accommodates'])
     13     rmse = numpy.sqrt(mean_squared_error(predict_arg['price'], predict))

/dataquest/system/env/python3/lib/python3.4/site-packages/sklearn/neighbors/base.py in fit(self, X, y)
    739         """
    740         if not isinstance(X, (KDTree, BallTree)):
--> 741             X, y = check_X_y(X, y, "csr", multi_output=True)
    742         self._y = y
    743         return self._fit(X)

/dataquest/system/env/python3/lib/python3.4/site-packages/sklearn/utils/validation.py in check_X_y(X, y, accept_sparse, dtype, order, copy, force_all_finite, ensure_2d, allow_nd, multi_output, ensure_min_samples, ensure_min_features, y_numeric, warn_on_dtype, estimator)
    529         y = y.astype(np.float64)
    530 
--> 531     check_consistent_length(X, y)
    532 
    533     return X, y

/dataquest/system/env/python3/lib/python3.4/site-packages/sklearn/utils/validation.py in check_consistent_length(*arrays)
    179     if len(uniques) > 1:
    180         raise ValueError("Found input variables with inconsistent numbers of"
--> 181                          " samples: %r" % [int(l) for l in lengths])
    182 
    183 

ValueError: Found input variables with inconsistent numbers of samples: [1, 1862]

Tags: intestargtrainsklearnmeanonepredict
2条回答

如果train_arg是一个数据帧,那么train_arg['accomodates']是一个序列,而train_arg[['accomodate']]是一个数据帧(只包含一列)。你知道吗

由于fit和predict中使用的数据应该有多个列,因此函数将位于pandas.DataFrame上,而不是位于pandas.Series上。你知道吗

要防止发生此错误,请确保数据(fit中的第一个参数,也是predict中的唯一参数)是pandas.DataFramenumpy.ndarray类型。你知道吗

实际上,我修改了下面的代码。你知道吗

def train_predict(train_arg, predict_arg):
    knn = KNeighborsRegressor()
    knn.fit(train_arg[['accommodates']], train_arg['price'])
    predict = knn.predict(predict_arg[['accommodates']])
    rmse = numpy.sqrt(mean_squared_error(predict_arg['price'], predict))
    return rmse

注意train_arg[['accommodates']]中的双括号。你知道吗

添加双括号确实有效。但我确实不明白原因。有什么提示吗?你知道吗

相关问题 更多 >