【问题标题】:numpy / pandas datetimesnumpy / pandas 日期时间
【发布时间】:2015-05-25 04:34:11
【问题描述】:

在 pandas 数据框中,比如 mydf(我最初从雅虎下载的股票价格创建的值),我有以下 dtypes

Close               float64
DateTime     datetime64[ns]
High                float64
Low                 float64
Open                float64
Volume              float64

DateTime 列同时包含日期和时间组件,即2015-03-20 00:00:28,但我只想保留日期部分,即2015-03-20

我尝试使用mydf['DateTime'].astype('<M8[D]')datetime64[ns] 转换为datetime64[D],但出现错误TypeError: cannot astype a datetimelike from [datetime64[ns]] to [datetime64[D]]

我尝试了 mydf['DateTime'].values.astype('<M8[D]') 并且它运行时没有错误。当我显示print(mydf) 时,时间组件不再打印。

但是,如果我执行mydf.dtypes,则为mydf['DateTime'] 显示的dtype 保持不变,如果我尝试mydf['DateTime'][0]type,它实际上表明它是pandas.tslib.Timestamp

如果有人能解释为什么 pandas datetime64[ns] 列的各个元素是 pandas.tslib.Timestamp 类型以及如何正确地将 pandas datetime64[ns] 列转换为 datetime64[D] 列,那就太好了?

另外,有谁知道 pandas 是否支持datetime64[D]

附言这是根据 J. F. Sebastian 要求在每个帖子中只放 1 个问题对我之前问题的修改

【问题讨论】:

  • 请避免每个帖子出现多个问题。我在这里看到至少三个可以独立回答的问题。
  • 例如,我只知道 3 个答案中的 2 个,这会阻止我发布答案。
  • 您希望移除 3 个中的哪个?
  • 删除了 1 个问题。另外两个高度相关并且彼此相关 - 可以将它们视为具有两个部分的同一个问题。

标签: python python-3.x numpy pandas


【解决方案1】:

您可以通过这种方式将时间戳转换为 YYYY-MM-DD 日期:

mydf.DateTime.map(lambda x: x.date())

但是,生成的 dtype 是 object,而不是 datetime64[D]

【讨论】:

  • 你也可以使用dt访问器:mydf.DateTime.dt.date
猜你喜欢
  • 2018-10-20
  • 1970-01-01
  • 2020-01-05
  • 2016-07-05
  • 1970-01-01
  • 2018-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多