Строка с двумя отметками времени в одной строке для преобразования даты и времени - PullRequest
1 голос
/ 30 сентября 2019

csv включает некоторое значение столбца ниже типа строки метки времени, как преобразовать его в дату-время самой последней даты в пандах ...

2019-09-27 09:15:422019-09-28 14:55:182019-09-26 04:54:12 

case[date]=case[date].apply(lambda x: pd.to_datetime(x,errors = 'coerce',infer_datetime_format=True))

, но выполнить с ошибкой ниже

('offset must be a timedelta strictly between -timedelta(hours=24) and timedelta(hours=24).', 'occurred at index Preauth Pending Date')

Ответы [ 2 ]

0 голосов
/ 30 сентября 2019

Попробуйте это:

df = pd.DataFrame({'date':['2019-09-27 09:15:422019-09-28 14:55:182019-09-26 04:54:12']})
df['date']=df['date'].apply(lambda x : max([pd.to_datetime(x[i:i+19]) for i in range(0,len(x),19)]))
df['date']

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

0 голосов
/ 30 сентября 2019

Идея - добавить , для целых чисел с длиной 4 до - для возможного разбиения на ,, преобразовать в даты и получить max значение:

df = pd.DataFrame({'date':['2019-09-27 09:15:422019-09-28 14:55:182019-09-26 04:54:12',
                           '2018-09-27 09:15:422018-09-28 14:55:182020-09-26 04:54:12']})
#print (df)

f = lambda x: pd.to_datetime(x, errors = 'coerce',infer_datetime_format=True)
df['last'] = (df['date'].str.replace(r'(\d{4}-)', r',\1')
                        .str.split(',', expand=True)
                        .apply(f)
                        .max(axis=1))
print (df)
                                                date                last
0  2019-09-27 09:15:422019-09-28 14:55:182019-09-... 2019-09-28 14:55:18
1  2018-09-27 09:15:422018-09-28 14:55:182020-09-... 2020-09-26 04:54:12

РЕДАКТИРОВАТЬ:

d = {'Preauth Pending Date': [nan, nan, nan, '2019-09-21 05:34:06', nan],
 'Preauth Pending Updated Date': [nan, nan, nan, '2019-09-23 10:29:05', nan],
 'Claim Pending Date': ['2019-09-26 15:51:492019-09-16 09:40:06', nan,'2019-09-24 11:59:33', nan, nan],
 'Claim Pending Updated Date': ['2019-09-27 09:06:122019-09-16 09:49:34', nan, '2019-09-25 09:13:45', nan, nan]}


df = pd.DataFrame(d)
#print (df)

for c in df.columns:
    f = lambda x: pd.to_datetime(x, errors = 'coerce',infer_datetime_format=True)
    df[c] = (df[c].str.replace(r'(\d{4}-)', r',\1')
                                .str.split(',', expand=True)
                                .apply(f)
                                 .max(axis=1))
print (df)

  Preauth Pending Date Preauth Pending Updated Date  Claim Pending Date  \
0                  NaT                          NaT 2019-09-26 15:51:49   
1                  NaT                          NaT                 NaT   
2                  NaT                          NaT 2019-09-24 11:59:33   
3  2019-09-21 05:34:06          2019-09-23 10:29:05                 NaT   
4                  NaT                          NaT                 NaT   

  Claim Pending Updated Date  
0        2019-09-27 09:06:12  
1                        NaT  
2        2019-09-25 09:13:45  
3                        NaT  
4                        NaT  
...