在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
。
我尝试使用datetime64[ns]
将datetime64[D]
转换为mydf['DateTime'].astype('<M8[D]')
,但收到错误TypeError: cannot astype a datetimelike from [datetime64[ns]] to [datetime64[D]]
。
我尝试了mydf['DateTime'].values.astype('<M8[D]')
,它运行时没有错误。当我显示print(mydf)
时,时间组件不再打印。
但是,如果我mydf.dtypes
,dtype
显示的mydf['DateTime']
保持不变,如果我尝试type
mydf['DateTime'][0]
,它实际上会显示它是pandas.tslib.Timestamp
。
如果有人可以解释为什么pandas datetime64[ns]
列的各个元素属于pandas.tslib.Timestamp
类型以及如何正确地将pandas datetime64[ns]
列转换为datetime64[D]
,那会很棒专栏?
或者,是否有人知道pandas是否支持datetime64[D]
?
P.S。这是基于J. F. Sebastian要求在每个帖子中只提出1个问题的我之前提出的问题的修改
答案 0 :(得分:0)
您可以通过以下方式将时间戳转换为YYYY-MM-DD日期:
mydf.DateTime.map(lambda x: x.date())
但是,生成的dtype为object
,而不是datetime64[D]
。