Pandas DataFrame - '不能在使用 ols/线性回归时将日期时间从 [datetime64[ns]] 输入到 [float64]'

Posted

技术标签:

【中文标题】Pandas DataFrame - \'不能在使用 ols/线性回归时将日期时间从 [datetime64[ns]] 输入到 [float64]\'【英文标题】:Pandas DataFrame - 'cannot astype a datetimelike from [datetime64[ns]] to [float64]' when using ols/linear regressionPandas DataFrame - '不能在使用 ols/线性回归时将日期时间从 [datetime64[ns]] 输入到 [float64]' 【发布时间】:2017-03-20 02:55:02 【问题描述】:

我有一个如下的DataFrame:

   Ticker        Date  Close
0    ADBE  2016-02-16  78.88
1    ADBE  2016-02-17  81.85
2    ADBE  2016-02-18  80.53
3    ADBE  2016-02-19  80.87
4    ADBE  2016-02-22  83.80
5    ADBE  2016-02-23  83.07

...等等。 Date 列是问题所在。我正在尝试使用Close 列对Date 列进行线性回归:

ols1 = pd.ols(y=ADBE['Close'], x=ADBE['Date'], intercept=True)

我收到以下错误:

TypeError: cannot astype a datetimelike from [datetime64[ns]] to [float64]

我尝试了多种方法来消除此错误,例如:

dates_input = ADBE['Date'].values.astype('datetime64[D]')

dates_input = ADBE['Date'].values.astype('float')

第二次dates_input 尝试将类型返回为pandas.core.series.Series,但我仍然收到错误消息。

有谁知道如何让Date 列工作并摆脱这个TypeError?

【问题讨论】:

【参考方案1】:

你需要:

ADBE['Date'] = ADBE['Date'].values.astype(float)

然后:

ols1 = pd.ols(y=ADBE['Close'], x=ADBE['Date'], intercept=True)

【讨论】:

我搞错了;对于可能犯同样错误的其他人;注意不要使用Series.astype(float)(如;pd.Series(ADBE['Date'].values).astype(float);注意@jezrael的回答使用ndarray.astype(float)(直接在.values.astype(float)上)

以上是关于Pandas DataFrame - '不能在使用 ols/线性回归时将日期时间从 [datetime64[ns]] 输入到 [float64]'的主要内容,如果未能解决你的问题,请参考以下文章

python的dataframe能不能效率解决这个需求

从 Pandas DataFrame 中删除一列

pandas DataFrame

外推(和内插)Pandas DataFrame

从 Pandas DataFrame 中删除一列

pandas对DataFrame对象的基本操作