конвертировать дату и время минуты и год в python - PullRequest
0 голосов
/ 21 ноября 2018

У меня есть кадр данных, как показано ниже

customerid            mydate

    123              2016-08-15 18:22:40
    234              2017-08-15 42:34.04
    234              39:35.01

столбец mydate смешан, у некоторых есть годы со временем, у других только время.Столбец mydate - это объект, но я хочу преобразовать его в дату и время, как показано ниже

df['mydate']     =  pd.to_datetime(df['mydate'], format='%Y-%m-%d %H:%M:%S')

, но я получаю приведенную ниже ошибку

ValueError: time data 39:35.01 doesn't match format specified 

Ответы [ 2 ]

0 голосов
/ 21 ноября 2018

Вы можете использовать:

#get today date
today = pd.Timestamp.today().floor('D')
#split dates by whitespace
s = df['mydate'].str.split()
#first part convert to datetime if possible replace non exist dates to today
df['date'] =  pd.to_datetime(s.str[0], errors='coerce').fillna(today)
#non exist second part of splited values replace by first part
s1 = s.str[1].combine_first(s.str[0])
#if 3. character from back is . add zero hours and convert to timedeltas
df['td']  =  pd.to_timedelta(s1.mask(s1.str[-3] == '.', '00:'+ s1))
#add timedelta to dates
df['datefinal'] = df['date'] + df['td']
print (df)
  customerid               mydate       date              td  \
0        123  2016-08-15 18:22:40 2016-08-15        18:22:40   
1        234  2017-08-15 42:34.04 2017-08-15 00:42:34.040000   
2        234             39:35.01 2018-11-21 00:39:35.010000   

                datefinal  
0 2016-08-15 18:22:40.000  
1 2017-08-15 00:42:34.040  
2 2018-11-21 00:39:35.010  
0 голосов
/ 21 ноября 2018

Ваш столбец mydate имеет значения, не относящиеся к дате и времени, поэтому вам необходимо перепроверить целостность источника данных.И даже если формат был правильным, с предоставленной информацией такое преобразование невозможно, ни на Python, ни на каком-либо другом языке (как бы вы узнали, на какую дату было записано это конкретное время?).

...