如何通过去除纳秒转换日期时间

3 投票
4 回答
12528 浏览
提问于 2025-04-20 00:00

我有一些示例的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()的时候,纳秒的部分会被去掉。

撰写回答