Pandas 如何从datetime中提取一天中的时间(pd.Timedelta或datetime.time)?

Pandas 如何从datetime中提取一天中的时间(pd.Timedelta或datetime.time)?,pandas,datetime,timedelta,Pandas,Datetime,Timedelta,给出一个包含带有pd.Datetime的列的数据帧,如下所示: import pandas as pd df = pd.DataFrame({ 'name': ['Alice', 'Bob'], 'starttime': ['2020-03-20 15:05:00', '2020-03-20 15:16:00'], }) df['starttime'] = pd.to_datetime(df['starttime']) 如何正确获取一天中的时间作为pd.TimeDelta? 我

给出一个包含带有
pd.Datetime
的列的数据帧,如下所示:

import pandas as pd
df = pd.DataFrame({
    'name': ['Alice', 'Bob'],
    'starttime': ['2020-03-20 15:05:00', '2020-03-20 15:16:00'],
})
df['starttime'] = pd.to_datetime(df['starttime'])
如何正确获取一天中的时间作为
pd.TimeDelta

我知道可以使用
df['starttime'].dt.time
提取python
datetime.time
,但这对我没有帮助,因为我想使用pandas数据类型(即
pd.TimeDelta
)来保持时间比较清晰(我必须进行大量比较,我正在寻找干净的代码)。例如,
df['starttime'].dt.time>pd.TimeDelta(13:00)
将不起作用。它抛出错误
TypeError:无法将类型Timedelta与类型time进行比较,这很有意义

对于如何实现这一目标,我有两个想法:

  • df['starttime']-df['starttime'].dt.floor('1D')
    :这看起来“不错”,但我不确定其含义。我怀疑它能否控制一年中时间变化的两天,即夏季和冬季。我只想忽略那些日子,不管是哪一天,上午11点就是上午11点

  • pd.to_datetime(df['starttime'].dt.time.astype(str)
    :它看起来很粗糙,但我认为它给了我想要的


  • 这种方法合适吗?有没有一种方法可以用熊猫来表示时间?我看到的是
    Datetime
    Timedelta
    Timestamp
    ,既然你在处理时间变化,你不应该在数据中添加时区吗?我想我在我的示例中把问题简化了,你可以使用Datetime列n的时间部分是字符串,然后是timedelta,例如
    pd.to_timedelta(df['starttime'].dt.time.astype(str)),这会有帮助吗?是的,这是我的第二个选择(见最后的问题),但我想知道这是否是正确的方法?因为您正在处理时间更改,这似乎有点太过草率,您不应该将时区添加到数据中吗?我想我在我的示例中过于简化了这个问题,您可以将datetime列的时间部分转换为字符串,然后转换为timedelta,例如,
    pd.to_timedelta(df['starttime'].dt.time.astype(str))
    ,这会有帮助吗?是的,这是我的第二个选择(见最后的问题),但我想知道这是否是正确的方法?对我来说,这似乎有点不妥