关于仅在使用pd.to_datetime之后保留日期信息

时间:2018-08-10 03:13:17

标签: python python-3.x pandas numpy datetime

原始记录具有以下格式,即日期信息以字符串格式存储

records[‘start_date’].unique()
array([nan, '6/3/2012', '10/20/2013'], dtype=object)

根据该论坛的建议,我使用以下代码将其传输到datetime

Records[‘start_date’] = pd.to_datatime(records[‘start_date’], format =’%m/%d/%Y’)

传输的数组具有以下摘要

array(['NaT', '2012-06-03T00:00:00.000000000',
       '2013-10-20T00:00:00.000000000',], dtype='datetime64[ns]')

我想使传输的日期时间格式更精简,仅保留日期而不保留那些分钟/秒信息。具体来说,我想要这样的格式

array(['NaT', '2012-06-03,
       '2013-10-20',], dtype='datetime64[ns]')

如何实现该目标?谢谢

1 个答案:

答案 0 :(得分:1)

  

我想使转移日期时间格式更精简,并且   仅保留日期,而不保留这些分钟/秒的信息。

这是不正确的。 np.datetime64本质上是int64上的一个薄包装。因此,这种格式比字符串更有效地存储日期(包括时间等)。不要被显示所迷惑:'2012-06-03T00:00:00.000000000'只是底层整数的文本表示。这里有一些证据:

import datetime, sys, numpy as np

now = datetime.datetime.now()

x_date = sys.getsizeof(np.datetime64(now))             # 40
x_int = sys.getsizeof(np.datetime64(now).astype(int))  # 28 
y = sys.getsizeof('10/20/2013')                        # 59

现在,如果您主要关注 display ,那么您可以在Pandas中将系列转换为object dtype系列中保存的字符串:

records['start_date'] = records['start_date'].dt.strftime('%Y-%m-%d')

一种替代方法是使用一系列datetime.date对象:

records['start_date'] = records['start_date'].dt.date

请注意,进一步的操作将导致内存和性能低下,第一种选择更是如此。