gpt4 book ai didi

python - 慢 pd.to_datetime()

转载 作者:行者123 更新时间:2023-11-28 22:16:03 24 4
gpt4 key购买 nike

我正在阅读两种非常相似的 csv 文件。它们的长度大致相同,为 20 000 行。每条线代表每秒记录的参数。因此,第一列是时间戳。

  • 在第一个文件中,模式如下:2018-09-24 15:38
  • 在第二个文件中,模式如下:2018-09-24 03:38:06 PM

在这两种情况下,命令是相同的:

data = pd.read_csv(file)
data['Timestamp'] = pd.to_datetime(data['Timestamp'])

我检查两条线的执行时间:

  • pd.read 在这两种情况下同样有效
  • 执行第二行代码需要大约 3 到 4 秒

唯一的区别是日期模式。我不会怀疑的。你知道为什么吗?你知道如何解决这个问题吗?

最佳答案

pandas.to_datetime 在需要自动解析日期时(在某些情况下)非常慢。既然你知道格式,你应该显式地将它们传递给 format 参数,这将大大提高速度。

这是一个例子:

import pandas as pd
df1 = pd.DataFrame({'Timestamp': ['2018-09-24 15:38:06']*10**5})
df2 = pd.DataFrame({'Timestamp': ['2018-09-24 03:38:06 PM']*10**5})

%timeit pd.to_datetime(df1.Timestamp)
#21 ms ± 50.4 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)

%timeit pd.to_datetime(df2.Timestamp)
#14.3 s ± 122 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

慢了 700 倍。现在明确指定格式:

%timeit pd.to_datetime(df2.Timestamp, format='%Y-%m-%d %I:%M:%S %p')
#384 ms ± 1.9 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

pandas 解析第二种日期格式的速度仍然较慢,但已经不像以前那么糟糕了。


编辑:从 pd.__version__ == '1.0.5' 开始,对于过去解析速度极慢的格式,自动解析似乎变得更好了,这可能是由于 this performance improvement 的实现在 pd.__version == '0.25.0'

import pandas as pd
df1 = pd.DataFrame({'Timestamp': ['2018-09-24 15:38:06']*10**5})
df2 = pd.DataFrame({'Timestamp': ['2018-09-24 03:38:06 PM']*10**5})

%timeit pd.to_datetime(df1.Timestamp)
#9.01 ms ± 294 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

%timeit pd.to_datetime(df2.Timestamp)
#9.1 ms ± 267 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

关于python - 慢 pd.to_datetime(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52480839/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com