我有一个熊猫数据框,看起来像这样:
pta ptd dep_at
4 2020-01-08 05:17:00 NaT NaT
6 2020-01-08 05:29:00 2020-01-08 05:30:00 NaT
9 2020-01-08 05:42:00 2020-01-08 05:44:00 2020-01-08 05:44:00
11 2020-01-08 05:53:00 2020-01-08 05:54:00 2020-01-08 05:55:00
12 2020-01-08 06:03:00 2020-01-08 06:05:00 2020-01-08 06:04:00
和数据类型:
pta datetime64[ns]
ptd datetime64[ns]
dep_at datetime64[ns]
dtype: object
我用这些来预测另一列,arr_at
,也就是datetime64[ns]
。运行此功能可以很好地工作:
X = df[['pta','ptd','dep_at']]
y = df.arr_at
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3) # 70% training and 30% test
knn = KNeighborsClassifier(n_neighbors=5)
knn.fit(X_train, y_train)
y_pred = knn.predict(X_test)
print("Accuracy:",metrics.accuracy_score(y_test, y_pred))
我正在尝试添加另一个功能列,因此我的输入现在如下所示:
pta ptd dep_at tpl_num
4 2020-01-08 05:17:00 NaT NaT 0
6 2020-01-08 05:29:00 2020-01-08 05:30:00 NaT 1
9 2020-01-08 05:42:00 2020-01-08 05:44:00 2020-01-08 05:44:00 2
11 2020-01-08 05:53:00 2020-01-08 05:54:00 2020-01-08 05:55:00 3
12 2020-01-08 06:03:00 2020-01-08 06:05:00 2020-01-08 06:04:00 4
(和数据类型):
pta datetime64[ns]
ptd datetime64[ns]
dep_at datetime64[ns]
tpl_num int64
dtype: object
但是现在,当我运行与以前相同的KNN代码时,只会改变
X = df[['pta','ptd','dep_at']]
到
X = df[['pta','ptd','dep_at','tpl_num']]
我得到这个错误:
TypeError: float() argument must be a string or a number, not 'Timestamp'
我不知道出了什么问题。可能需要注意的是,我通过这样做将列添加到功能数据中,尽管我非常确定这不会影响任何内容:
#Map station names in csv to ints, using dictionary comprehension
tpl_class = {k: v for v, k in enumerate(df.tpl.unique())}
#Apply to data
df['tpl_num'] = [tpl_class[i] for i in df.tpl]
我认为这是因为你现在的knn中有混合类型
解决方法是将datetime[ns]转换为integer(例如,对于一列):
在选择X之前,请将其包含在所有datetime列中,然后它就可以工作了
相关问题 更多 >
编程相关推荐