无法将数组数据从dtype('<m8 [ns]')强制转换为=“” dtype('float64')

时间:2019-04-23 08:00:45

标签: numpy scikit-learn

=“”

我正在尝试预测门票销售并收到以下错误:

TypeError: Cannot cast array data from dtype('<M8[ns]') to dtype('float64') according to the rule 'safe'

我在这里附加了我的代码。运行pred_lr = linear_reg.predict(X_all)时似乎发生了错误。我假设我必须在某个地方更改类型?但是我不知道我到底在做什么错。

    from sklearn.linear_model import LinearRegression

    # Load data
    event_data = pd.read_csv('event_data.csv')

    # Explore data
    data = pd.DataFrame(event_data)

    split_date = pd.datetime(2019,3,31)
    data['created'] = pd.to_datetime(data['created'])

    data_train = data[data.created < split_date]
    data_test = data[data.created >= split_date]

    # predict prices based on date
    X_train = data_train.created[:, np.newaxis]
    y_train = data_train.tickets_sold

    linear_reg = LinearRegression().fit(X_train, y_train)

    # predict on all data
    X_all = event_data.created[:, np.newaxis]

    pred_lr = linear_reg.predict(X_all)

所有行here。这是我的数据头。

created event_id tickets_sold tickets_sold_sum
0   3/12/19 1   90  90
1   3/13/19 1   40  130
2   3/14/19 1   13  143
3   3/15/19 1   8   151
4   3/16/19 1   13  164

1 个答案:

答案 0 :(得分:0)

处理datetime值的最简单方法是将它们转换为POSIX timestamps

X_train = data_train.created.astype("int64").values.reshape(-1, 1) // 10**9

X_all = event_data.created.astype("int64").values.reshape(-1, 1) // 10**9

但是,由于测试集的POSIX时间值合理地超出了训练集中的POSIX时间值范围,因此通过这种方式,您几乎不会学到任何有用的信息来预测未来的数据。

我的建议是修改X_trainX_all,以便从日期起获得多种信息功能(如使用一键编码的分类功能):

  1. 星期几
  2. 每月的某天
  3. 一年中的月份