python - Pandas,如何将 pd.Dataframe 作为函数中的参数
问题描述
实际上,为了简化代码,我决定使用一个以 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]
解决方案
如果train_arg
是数据框,则train_arg['accomodates']
是系列,train_arg[['accomodate']]
而是数据框(仅包含一列)。
由于 fit 和 predict 中使用的数据应该有多个列,因此函数将位于 apandas.DataFrame
而不是 a pandas.Series
。
为防止发生此错误,请确保您的数据(fit 中的第一个参数,predict 中的唯一参数)属于pandas.DataFrame
或numpy.ndarray
类型。
推荐阅读
- javascript - 将带有对象和其他字段的嵌套数组上传到 Firestore 的优雅方法是什么?(Node.js,Javascript)
- python - 提取深度嵌套 JSON 中的所有特定值对
- java - 使用 Simba Spark JDBC 驱动程序的多语句查询
- python - 如何在 Python 中制作(字符串)标签数据的 2D 直方图/热图?
- mysql - 使用 AND 条件创建弹性搜索查询并获取计数总和
- c# - JWT 和刷新令牌不工作
- flutter - Flutter 推送通知应用程序背景:firebase_messaging
- gtsummary - 使用 mgcv gam() 和 gtsummary tbl_uvregression()
- c++ - 与 std::vector 的 std::find 相比,std::remove 的性能如何?
- c++ - 静态变量的范围到几个文件 C++