首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解析带毫秒和不带毫秒的Datetime对象

解析带毫秒和不带毫秒的Datetime对象
EN

Stack Overflow用户
提问于 2018-12-15 04:10:59
回答 4查看 139关注 0票数 0

我有一个CSV文件,它的第一列如下所示:

代码语言:javascript
复制
2018-12-10 20:00:25.855
2018-12-10 20:09:26
2018-12-10 20:13:27.31
2018-12-10 20:23:28

这些字符串是我希望最终转换为time对象的字符串(不带date)。我的第一步是删除毫秒,但当一些字符串不包含毫秒时,我不知道如何做到这一点。

我尝试使用此行替换毫秒值,但最终出现了"data remains“错误。

代码语言:javascript
复制
 strdate = datetime.strptime(column[0], '%Y-%m-%d %H:%M:%S').replace(microsecond=0)
 ValueError: unconverted data remains: .855

我也试过剥离".“后面的字符串。但是什么也没发生。

代码语言:javascript
复制
column[0].strip('.')
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-12-16 21:51:51

如果您想要解析包含微秒的时间,您可以有条件地展开格式字符串:

代码语言:javascript
复制
from datetime import datetime as DT

times =['2018-12-10 20:00:25.855',
'2018-12-10 20:09:26',
'2018-12-10 20:13:27.31',
'2018-12-10 20:23:28']

for t in times:
    hasdot = '.' in t
    print(DT.strptime(t[11:], '%H:%M:%S' + ('.%f' if hasdot else '' )).time())

#20:00:25.855000
#20:09:26                                                    
#20:13:27.310000                                           
#20:23:28             
票数 0
EN

Stack Overflow用户

发布于 2018-12-15 04:23:51

代码语言:javascript
复制
string = '20:00:25.855'
newstr = string[:string.find('.')]
print (newstr)
#20:00:25

使用上面概述的逻辑:

代码语言:javascript
复制
import pandas as pd
datadict = {
        'Time':['2018-12-10 20:00:25.855',
                '2018-12-10 20:09:26',
                '2018-12-10 20:13:27.31',
                '2018-12-10 20:23:28'],
        }
df = pd.DataFrame(datadict)

df['Time'] = [row[11:row.find('.')] if '.' in row else row[11:] for row in df['Time']]
print (df)
       Time
0  20:00:25
1  20:09:26
2  20:13:27
3  20:23:28
票数 0
EN

Stack Overflow用户

发布于 2018-12-15 04:30:43

这将返回datetime对象的时间部分,然后您可以将其用于所需的任何计算:

代码语言:javascript
复制
from datetime import datetime

def get_times():
    times = ['2018-12-10 20:00:25.855','2018-12-10 20:09:26']
    return [datetime.strptime(x[11:19],'%H:%M:%S').time() for x in times]

输出为:[datetime.time(20, 0, 25), datetime.time(20, 9, 26)]

要返回“可读”表单,请执行以下操作:

代码语言:javascript
复制
def get_times():
    times = ['2018-12-10 20:00:25.855','2018-12-10 20:09:26']
    dt_objects =  [datetime.strptime(x[11:19],'%H:%M:%S').time() for x in times]
    return [dt.strftime('%H:%M:%S') for dt in dt_objects]

输出为:['20:00:25', '20:09:26']

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53786318

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档