如何通过去除纳秒转换日期时间
我有一些示例的CSV数据,其中的时间格式如下:
2014-04-29 00:00:01.933000,2014-04-29 00:00:01.933000
我可以用pd.to_datetime(data['ts'])和pd.DatetimeIndex(data['ts'])来处理这些数据。
但是,我想把输出格式化成%Y-%m-%d %H:%M:%S,也就是去掉纳秒部分。
我发现文档里似乎没有提到这种简单的日期格式化方法,我在pandas的文档中看过很多。我知道另一种方法是把它转换成浮点数。
np.floor(pd.DatetimeIndex(pd.to_datetime(sdfeed1['ts'])).astype(int64)/1e9)
我不喜欢这种复杂的方法。有没有更简单的方法可以把一堆日期时间转换成简单的格式?就像Excel那样,不用任何lambda函数。
pd.convert(...日期列表..., format = '....'),应该简单到这个程度吧!我是不是要求太多了?用np和lambda函数来处理这个问题太过复杂了。
4 个回答
1
你可以这样尝试:
datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
这样会输出结果为:
'2014-09-05 14:41:26'
1
使用 dateutil.parser
来解析日期,然后再格式化这个日期时间对象。
>>> from dateutil.parser import parse
>>> raw_text = '2014-04-29 00:00:01.933000 2014-04-29 00:00:01.933000 2014-04-29 00:00:02.308000 2014-04-29 00:00:02.308000 2014-04-29 00:00:03.308000 2014-04-29 00:00:03.308000 2014-04-29 00:00:06.792000 2014-04-29 00:00:06.792000 2014-04-29 00:00:07.480000 2014-04-29 00:00:07.480000 2014-04-29 00:00:08.355000 2014-04-29 00:00:08.355000 2014-04-29 00:00:15.027000 2014-04-29 00:00:15.027000 2014-04-29 00:00:15.917000 2014-04-29 00:00:15.917000 2014-04-29 00:00:22.558000 2014-04-29 00:00:22.558000'
>>> dates = raw_text.split()
>>> date_parts = 2
>>> for idx in xrange(0,len(dates),date_parts):
... text = ' '.join(dates[idx:idx+date_parts])
... dt = parse(text)
... dt.strftime("%Y-%m-%d %H:%M:%S")
...
'2014-04-29 00:00:01'
'2014-04-29 00:00:01'
'2014-04-29 00:00:02'
'2014-04-29 00:00:02'
'2014-04-29 00:00:03'
'2014-04-29 00:00:03'
'2014-04-29 00:00:06'
'2014-04-29 00:00:06'
'2014-04-29 00:00:07'
'2014-04-29 00:00:07'
'2014-04-29 00:00:08'
'2014-04-29 00:00:08'
'2014-04-29 00:00:15'
'2014-04-29 00:00:15'
'2014-04-29 00:00:15'
'2014-04-29 00:00:15'
'2014-04-29 00:00:22'
'2014-04-29 00:00:22'
注意:dateutil.parser
可以解析日期字符串,而不需要你指定格式!!
>>> text = '2014/04/29 00:00:01.933000'
>>> dt = parse(text)
>>> dt.strftime("%Y-%m-%d %H:%M:%S")
'2014-04-29 00:00:01'
>>>
>>> text = '29/4/14 00:00:01.933000'
>>> dt = parse(text)
>>> dt.strftime("%Y-%m-%d %H:%M:%S")
'2014-04-29 00:00:01'
2
这个怎么样呢。
pd.Timestamp("now").round('s')
3
data['from_timestamp']=data['from_timestamp'].values.astype('datetime64[s]')
这段话的意思是,这个操作会把datetime64[ns]中的纳秒部分设置为0。最终的结果仍然是datetime64[ns]类型,但在调用astype()的时候,纳秒的部分会被去掉。