如何在python中从datetime到time(HH:MM:SS)传递数据帧列

如何在python中从datetime到time(HH:MM:SS)传递数据帧列,python,pandas,date,datetime,time,Python,Pandas,Date,Datetime,Time,我有一个df,看起来像这样: date arrival_time departure_time 0 2021-01-16 2021-01-16 16:58:16 2021-01-16 21:02:19 1 2021-01-16 2021-01-16 22:34:04 2021-01-16 22:34:51 2 2021-01-27 2021-01-27 16:01:21 2021-01-27 16:02:22

我有一个df,看起来像这样:

           date          arrival_time       departure_time
0     2021-01-16  2021-01-16 16:58:16  2021-01-16 21:02:19
1     2021-01-16  2021-01-16 22:34:04  2021-01-16 22:34:51
2     2021-01-27  2021-01-27 16:01:21  2021-01-27 16:02:22
3     2021-01-07  2021-01-07 11:57:08  2021-01-07 14:22:15
4     2021-01-07  2021-01-07 12:20:54  2021-01-07 13:41:43
         date     arrival_time   departure_time 
0     2021-01-16    16:58:16      21:02:19
1     2021-01-16    22:34:04      22:34:51
2     2021-01-27    16:01:21      16:02:22
3     2021-01-07    11:57:08      14:22:15
4     2021-01-07    12:20:54      13:41:43
日期
到达时间
出发时间
列是
datetime64[ns]
列。我要做的是将
到达时间
出发时间
列转换为
时间
,格式如下:
HH:MM:SS
。因此,我期望的输出应该如下所示:

           date          arrival_time       departure_time
0     2021-01-16  2021-01-16 16:58:16  2021-01-16 21:02:19
1     2021-01-16  2021-01-16 22:34:04  2021-01-16 22:34:51
2     2021-01-27  2021-01-27 16:01:21  2021-01-27 16:02:22
3     2021-01-07  2021-01-07 11:57:08  2021-01-07 14:22:15
4     2021-01-07  2021-01-07 12:20:54  2021-01-07 13:41:43
         date     arrival_time   departure_time 
0     2021-01-16    16:58:16      21:02:19
1     2021-01-16    22:34:04      22:34:51
2     2021-01-27    16:01:21      16:02:22
3     2021-01-07    11:57:08      14:22:15
4     2021-01-07    12:20:54      13:41:43
我尝试过以下代码:

df["arrival_time"] = pd.to_datetime(df['arrival_time']).dt.strftime("%H:%M:%S")
df["departure_time"] = pd.to_datetime(df['departure_time']).dt.strftime("%H:%M:%S")
我也试过这个:

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

但是,这两种方法都返回字符串,而不是
time
对象。如果有人知道怎么做,我会非常感谢你的帮助

要获取值作为
'datetime.time'
对象,可以使用
.time
如下所示:

df[“到达时间”]=pd.to\u日期时间(df['arrival\u time',format=“%Y-%m-%d%H:%m:%S”).dt.time
df[“出发时间”]=pd.to_datetime(df[“出发时间”],format=“%Y-%m-%d%H:%m:%S”).dt.time
打印(df)
打印(df[‘出发时间’][0]。uuuuu类uuuu)#打印元素类
输出:

         date arrival_time departure_time
0  2021-01-16     16:58:16       21:02:19
1  2021-01-16     22:34:04       22:34:51
2  2021-01-27     16:01:21       16:02:22
3  2021-01-07     11:57:08       14:22:15
4  2021-01-07     12:20:54       13:41:43
<class 'datetime.time'>
到达日期\u时间离开\u时间
0  2021-01-16     16:58:16       21:02:19
1  2021-01-16     22:34:04       22:34:51
2  2021-01-27     16:01:21       16:02:22
3  2021-01-07     11:57:08       14:22:15
4  2021-01-07     12:20:54       13:41:43

要获取值作为
'datetime.time'
对象,可以使用
.time
如下所示:

df[“到达时间”]=pd.to\u日期时间(df['arrival\u time',format=“%Y-%m-%d%H:%m:%S”).dt.time
df[“出发时间”]=pd.to_datetime(df[“出发时间”],format=“%Y-%m-%d%H:%m:%S”).dt.time
打印(df)
打印(df[‘出发时间’][0]。uuuuu类uuuu)#打印元素类
输出:

         date arrival_time departure_time
0  2021-01-16     16:58:16       21:02:19
1  2021-01-16     22:34:04       22:34:51
2  2021-01-27     16:01:21       16:02:22
3  2021-01-07     11:57:08       14:22:15
4  2021-01-07     12:20:54       13:41:43
<class 'datetime.time'>
到达日期\u时间离开\u时间
0  2021-01-16     16:58:16       21:02:19
1  2021-01-16     22:34:04       22:34:51
2  2021-01-27     16:01:21       16:02:22
3  2021-01-07     11:57:08       14:22:15
4  2021-01-07     12:20:54       13:41:43

可以
split()
按列拆分字符串,然后对特定于数据帧的列应用
datetime
转换:

import pandas as pd
import re
import datetime as dt

# splitting strings #
df['arrival_time'] = df['arrival_time'].str.split(' ', expand=True)[1]
df['departure_time'] = df['departure_time'].str.split(' ', expand=True)[1]

# converting to specific datetime format #

df["arrival_time"] = pd.to_datetime(df['arrival_time'],format="%H:%M:%S")
df["departure_time"] = pd.to_datetime(df['departure_time'], format="%H:%M:%S")
控制台输出:

#   date      arrival_time  departure_time
#0  2021-01-16  16:58:16    21:02:19
数据
可以
split()
按列拆分字符串,然后对特定于数据帧的列应用
datetime
转换:

import pandas as pd
import re
import datetime as dt

# splitting strings #
df['arrival_time'] = df['arrival_time'].str.split(' ', expand=True)[1]
df['departure_time'] = df['departure_time'].str.split(' ', expand=True)[1]

# converting to specific datetime format #

df["arrival_time"] = pd.to_datetime(df['arrival_time'],format="%H:%M:%S")
df["departure_time"] = pd.to_datetime(df['departure_time'], format="%H:%M:%S")
控制台输出:

#   date      arrival_time  departure_time
#0  2021-01-16  16:58:16    21:02:19
数据
使用
timedelta
可能更容易:
df['arrival\u time']=df['arrival\u time']-df['arrival\u time'].dt.normalize()
timedelta
可能更容易:
df['arrival\u time']=df['arrival\u time']-df['arrival\u time'.dt.normalize()
。它是一个
datetime
对象,但输出与我的初始数据相同:
2021-01-16 16:58:16
,即不是我想要的输出。@brenda了解您的要求,我已经更新了答案。这有帮助吗?其实没有,在执行df.info()时,我得到了一个
对象
类型:(@brenda try
df['deparation\u time'][0].\uuuu class\uuuuu
它返回的是
它不是您需要的吗?对不起,您完全正确!谢谢。它是
日期时间
对象,但输出与我的初始数据相同:
2021-01-16 16 16:58:16
,也就是说,不是我想要的输出。@brenda了解您的要求,我已经更新了答案。它有用吗?不太有用,当我做时ng df.info()我得到了一个
对象
类型:(@brenda try
df['deparation\u time']][0]。\uuuu class\uuuuu
它返回的是
它不是你需要的吗?对不起,你完全正确!谢谢。