首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >慢pd.to_datetime()

慢pd.to_datetime()
EN

Stack Overflow用户
提问于 2018-09-24 13:47:47
回答 1查看 2.3K关注 0票数 3

我正在阅读两种类型的csv文件,它们非常相似。他们差不多长了20,000行。每一行表示每秒钟记录的参数。因此,第一列是时间戳。

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

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

代码语言:javascript
复制
data = pd.read_csv(file)
data['Timestamp'] = pd.to_datetime(data['Timestamp'])

我检查两行的执行时间:

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-24 14:07:08

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

下面是一个例子:

代码语言:javascript
复制
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倍。现在,显式地指定格式:

代码语言:javascript
复制
%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'中,由于这种性能改进pd.__version == '0.25.0'中的实现,以前非常缓慢的解析格式的自动解析似乎已经变得更好了。

代码语言:javascript
复制
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)
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52480839

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档