Python 如何通过删除纳秒来转换日期时间

Python 如何通过删除纳秒来转换日期时间,python,datetime,numpy,pandas,Python,Datetime,Numpy,Pandas,我有以下格式的样本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或基本上在纳秒内删除 这个简单的dateformatter似乎在所有文档中都被遗漏了,我在pandas中读到过。我知道另一种选择是转换为浮动 np.floor(pd.

我有以下格式的样本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或基本上在纳秒内删除

这个简单的dateformatter似乎在所有文档中都被遗漏了,我在pandas中读到过。我知道另一种选择是转换为浮动

np.floor(pd.DatetimeIndex(pd.to_datetime(sdfeed1['ts'])).astype(int64)/1e9)
我不喜欢这种丑陋的方法。是否有任何简单的方法将日期时间数组转换为简单格式。就像excel一样,不使用任何lambda函数

转换(…日期列表…,格式=“…”),应该像这样简单!我要求太多了吗?为此推送np和lambda函数太过分了。

您可以这样尝试:

datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
这会将结果输出为:

'2014-09-05 14:41:26'

使用
dateutil.parser
,然后格式化datetime对象

>>> 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'
这将把datetime64[ns]的纳秒设置为0。最终结果仍然是datetime64[ns],但在调用astype()时,纳秒将被删除。

这个结果如何

pd.Timestamp("now").round('s')

那么我必须这样做。。。。pd.to_datetime(sdfeed['ts'])[0]。strftime(“%Y-%m-%d%H:%m:%S”)sdfeed['ts']也是一个数组……为什么strftime不能在整个数组上工作?这将再次导致lambda函数@咖啡馆:真的!它不会马上做这件事。您需要遍历数组并执行相同的操作。@coffeequant:-我想到的第二个选项是使用
unicode(datetime.datetime.now().replace(微秒=0))
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:02.308000 2014-04-29 00:00:03.308000 2014-04-29 00:00:03.308000 2014-04-29 00:00:00:06.792000 2014-04-04-29 00:00:00:00:07.4800002014-04-29 00:00:08.355000 2014-04-29 00:00:08.355000 2014-04-29 00:00:15.027000 2014-04-04-29 00:00:15.917000 2014-04-29 00:00:15.917000 2014-04-04-29 00:00:22.558000 2014-04-29 00:00:00:22.558000姓名:ts,数据类型:datetime64[ns]您的问题是什么:将datetime转换为不带纳秒的字符串(这是一个格式化问题),或者将其转换为不带纳秒的日期时间(这是一个舍入问题)?这里有一个开放的问题,可以将DatetimeIndex舍入作为一个函数提供:。您可以直接在自己身上对其进行修补。同时,感谢您提出的拉取请求!
pd.Timestamp("now").round('s')