Python 如何将包含混合时间和日期时间值的列转换为just datetime(或just time)?

Python 如何将包含混合时间和日期时间值的列转换为just datetime(或just time)?,python,pandas,datetime,Python,Pandas,Datetime,以下是专栏 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

以下是专栏

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'])

关闭时,您需要将两个列转换为TimeDelta,第二个是删除的日期,以便以后继续:

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

关闭时,您需要将两个列转换为TimeDelta,第二个是删除的日期,以便以后继续:

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
映射到
+
到_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
映射到
+
到_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

感谢Jezrael,我在尝试运行代码时遇到了以下错误:回溯>(上次的最新调用):文件“pandas/_libs/tslibs/timedeltas.pyx”,第182行,在pandas中。_libs.tslibs.timedeltas.array_到_timedelta64文件“pandas/_libs/tslibs/timedeltas.pyx”,第267行,在pandas中。_libs.tslibs.timedelta.parse_timedelta_string TypeError:datetime.time类型的对象没有len()@Sid,然后使用
df['time']=pd.to_timedelta(df['time'].astype(str))
转换为字符串。感谢Jezrael,我在尝试运行代码时出现以下错误:Traceback>(最近一次调用上次):File“pandas/_libs/tslibs/timedeltas.pyx”,pandas中的第182行。_libs.tslibs.timedeltas.array_to_timedelta64文件“pandas/_libs/tslibs/timedeltas.pyx”,pandas中的第267行。_libs.tslibs.timedeltas.parse_timedelta_字符串类型错误:“datetime”类型的对象没有len()@Sid然后使用
df['time']=pd.to_timedelta(df['time'].astype(str))
用于转换为字符串。