【问题标题】:How can I mix Datetime & int features with Scikit learn?如何将 Datetime 和 int 功能与 Scikit learn 混合使用?
【发布时间】:2020-04-26 05:19:43
【问题描述】:

我有一个看起来像这样的 pandas DataFrame:

                      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]

【问题讨论】:

    标签: python pandas machine-learning scikit-learn knn


    【解决方案1】:

    我认为发生这种情况是因为您现在的 knn 中有混合类型。

    一种解决方法是将您的 datetime[ns] 转换为 integer(例如,对于一列):

    df['pta'] = pd.to_datetime(df['pta']).astype(np.int64)
    

    在您选择 X 之前将所有日期时间列包括在内,然后它应该可以工作。

    【讨论】:

      猜你喜欢
      • 2016-02-01
      • 2021-10-21
      • 2015-06-15
      • 2014-03-02
      • 2014-05-01
      • 2021-12-03
      • 2017-01-30
      • 2018-07-28
      • 2015-08-13
      相关资源
      最近更新 更多