首页 > 解决方案 > 熊猫从 datetime.time 转换为整数时间戳

问题描述

可悲的是,这个问题的答案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 中调用它,因此速度不是那么快。

这是一篇很棒的博客文章

那么有没有更快的方法来转换datetime.time为某种int表示形式(比如total_seconds直到一天开始)?谢谢!

标签: pythonpandasdataframeapply

解决方案


推荐阅读