Разобрать объекты Datetime с миллисекундами и без - PullRequest
0 голосов
/ 14 декабря 2018

У меня есть 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

В настоящее время это строки, которые я хочу в конечном итоге преобразовать в объекты времени (без даты).Моим первым шагом было удаление миллисекунд, но я не могу понять, как это сделать, если некоторые строки не содержат миллисекунд.

Я пытался использовать эту строку для замены значения миллисекунд, но в итоге получаюс ошибкой «данные остаются».

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

Я также пытался очистить строку после "."но ничего не происходит.

column[0].strip('.')

Ответы [ 3 ]

0 голосов
/ 14 декабря 2018

Возвращает часть времени объекта 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)]

Для возврата «читабельного»'form:

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 голосов
/ 16 декабря 2018

На всякий случай, если вы хотите проанализировать время, включая микросекунды, вы можете условно расширить строку формата:

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 голосов
/ 14 декабря 2018
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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...