遗憾的是,this question对datetime.date
的回答不适用于datetime.time
。
所以我实现了一个df.apply()
函数,该函数可以完成我期望的操作:
def get_ts_timeonly_float(timeonly):
if isinstance(timeonly, datetime.time):
return timeonly.hour * 3600 + timeonly.minute * 60 + timeonly.second
elif isinstance(timeonly, pd.Timedelta):
return timeonly.seconds
fn_get_ts_timeonly_pd_timestamp = lambda row: get_ts_timeonly_float(row.ts_timeonly)
col = df.apply(fn_get_ts_timeonly_pd_timestamp, axis=1)
df = df.assign(ts_timeonly_as_ts=col.values)
问题:
但是,这还不是“非常快”。原因之一是.apply() 将在内部尝试循环Cython迭代器。但是在这种情况下 您传递的lambda不是可以处理的 Cython,因此在Python中称为“ Cython”,因此,这还不是全部 快。
因此,有没有更快的方法可以将datetime.time
转换为某些int
表示形式(例如total_seconds
直到一天开始)?谢谢!