我有一个CSV文件,它的第一列如下所示:
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“错误。
strdate = datetime.strptime(column[0], '%Y-%m-%d %H:%M:%S').replace(microsecond=0)
ValueError: unconverted data remains: .855我也试过剥离".“后面的字符串。但是什么也没发生。
column[0].strip('.')发布于 2018-12-16 21:51:51
如果您想要解析包含微秒的时间,您可以有条件地展开格式字符串:
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 发布于 2018-12-15 04:23:51
string = '20:00:25.855'
newstr = string[:string.find('.')]
print (newstr)
#20:00:25使用上面概述的逻辑:
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发布于 2018-12-15 04:30:43
这将返回datetime对象的时间部分,然后您可以将其用于所需的任何计算:
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)]
要返回“可读”表单,请执行以下操作:
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']
https://stackoverflow.com/questions/53786318
复制相似问题