【问题标题】:Cannot cast array data from dtype('<M8[ns]') to dtype('float64')无法将数组数据从 dtype('<M8[ns]') 转换为 dtype('float64')
【发布时间】:2019-04-23 18:30:36
【问题描述】:

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

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

【问题讨论】:

  • 可以说问题源于event_data.created 的类型。请提供它的摘录(不是图片),以使错误可重现。
  • 嗨@sentence 我改了它并添加了一段摘录。
  • 您确定错误出现在linear_reg.predict(X_all) 上而不是在linear_reg = LinearRegression().fit(X_train, y_train) 上吗?发布完整的堆栈跟踪 `

标签: numpy scikit-learn


【解决方案1】:

处理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 以便从日期获得多个信息特征(作为使用 one-hot 编码的分类特征):

  1. 星期几
  2. 一个月中的哪一天
  3. 一年中的月份

【讨论】:

  • 这似乎行得通!你能向我解释一下有什么问题吗?你在用 `values.reshape(-1, 1) 做什么。我的预测似乎仍然是错误的并且进入负数。但我认为这是另一个问题。
  • 添加解释和建议。
猜你喜欢
  • 1970-01-01
  • 2018-06-11
  • 2017-01-20
  • 2020-04-17
  • 1970-01-01
  • 2019-02-26
  • 2018-08-15
  • 1970-01-01
  • 2019-10-23
相关资源
最近更新 更多