Как преобразовать столбец со смешанными значениями времени и даты и времени в дату и время? - PullRequest
1 голос
/ 20 июня 2019

Вот столбцы

Time            CloseTime
17  09:30:00  2019-04-22 09:32:00
27  09:30:00  2019-05-13 09:32:00
36  09:30:00             15:15:00
37  09:30:00             15:15:00
44  09:30:00  2019-05-24 09:32:00
76  09:30:00  2019-06-07 09:32:00
92  09:30:00  2019-06-17 09:32:00

В настоящее время dtype для обоих столбцов O.

Я хочу преобразовать оба столбца в time, чтобы я мог сравнить (вычесть) их.

Я пробовал:

df['CloseTime'] = pd.to_datetime(df['CloseTime'])

TIA

Ответы [ 2 ]

3 голосов
/ 20 июня 2019

map + to_timedelta

Было немного весело с этим.

x = pd.to_datetime(df['CloseTime']).dt.time.astype(str)
y = df['Time'].astype(str)
# convert `x` and `y` to `timedelta`, then subtract
df['diff'] = pd.Series.sub(*map(pd.to_timedelta, (x, y)))
df

        Time            CloseTime     diff
17  09:30:00  2019-04-22 09:32:00 00:02:00
27  09:30:00  2019-05-13 09:32:00 00:02:00
36  09:30:00             15:15:00 05:45:00
37  09:30:00             15:15:00 05:45:00
44  09:30:00  2019-05-24 09:32:00 00:02:00
76  09:30:00  2019-06-07 09:32:00 00:02:00
92  09:30:00  2019-06-17 09:32:00 00:02:00
3 голосов
/ 20 июня 2019

Закройте, вам нужно преобразовать оба столбца в timedeltas, секунды с удаленными датами, поэтому возможна обработка позже:

df['Time'] = pd.to_timedelta(df['Time']. astype(str))
df['CloseTime'] = pd.to_timedelta(df['CloseTime'].str.split().str[-1])

#e.g. subtract columns    
df['diff'] = df['CloseTime'].sub(df['Time'])
print (df)
       Time CloseTime     diff
17 09:30:00  09:32:00 00:02:00
27 09:30:00  09:32:00 00:02:00
36 09:30:00  15:15:00 05:45:00
37 09:30:00  15:15:00 05:45:00
44 09:30:00  09:32:00 00:02:00
76 09:30:00  09:32:00 00:02:00
92 09:30:00  09:32:00 00:02:00
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...