如何在熊猫数据框中使用应用时创建列时间戳?

Posted

技术标签:

【中文标题】如何在熊猫数据框中使用应用时创建列时间戳?【英文标题】:How to create a column timestamp while using apply in a pandas dataframe? 【发布时间】:2019-05-20 02:28:13 【问题描述】:

我将一些函数应用于熊猫数据框列:

def foo(x):
     return 1 + x

然后,我将函数应用于列:

df['foo'] = df['a_col'].apply(foo)

如何返回一个列,其中包含函数 foo 完成所需的毫秒数?例如:

A time_milisecs
2 0.1
4 0.2
4 0.3
3 0.3
4 0.2

其中A 是包含求和结果的列。

【问题讨论】:

这只是一个例子......显然它是另一个函数我只想创建一个列,其中包含函数完成所需的时间(以毫秒为单位) 这可能有用:***.com/questions/24812253/… 【参考方案1】:

您可以使用time 模块。假设您还希望通过计算创建一个新系列,您可以输出一个元组序列,然后转换为数据帧并分配回两个系列。

这是一个演示:

import time

df = pd.DataFrame('A': [2, 4, 4, 3, 4])

def foo(x):
    tstart = time.time()
    time.sleep(0.25)
    tend = time.time()
    return 1 + x, (tend-tstart) * 10**3

df[['B', 'B_time']] = pd.DataFrame(df['A'].apply(foo).values.tolist())

print(df)

   A  B      B_time
0  2  3  250.014544
1  4  5  250.014305
2  4  5  250.014305
3  3  4  250.014305
4  4  5  250.014067

在 Python 3.7 中,您可以使用 time.process_time_ns,它以纳秒为单位测量时间。

【讨论】:

我会选择timeit,尽管time 似乎是简单的出路。请参阅 ***.com/questions/24812253/…,了解如何对 timeit 进行猴子补丁以一起返回计时和函数结果。 @coldspeed,你相信结果会有所不同吗?我发现timeit 很好,可以多次重复一个过程以获得平均时间。但是对于一次性计算,我看不出有什么区别。在 Python 3.7 中,您还拥有 time.process_time_ns 结果会一样,但至少时间会更准确。如果性能很重要(即,如果 OP 不想等待函数运行 30 次),或者如果这是执行 db 调用、io/async/rpc 调用之类的函数之一,那么肯定不合适。当然,对于这样的问题,你永远无法判断:-) @coldspeed 你能举个例子吗?

以上是关于如何在熊猫数据框中使用应用时创建列时间戳?的主要内容,如果未能解决你的问题,请参考以下文章

如何从熊猫数据框中的时间戳列中删除时区

无法在熊猫数据框中按时间戳索引

按时间戳列过滤/选择熊猫数据帧的行

如何在熊猫数据框中设置时间戳的偏移量?

将熊猫系列时间戳转换为唯一日期列表

在熊猫中使用单独的时间戳列进行最小/最大分组[重复]