当前位置: 首页 > 面试题库 >

为什么非标准时间格式(例如“ 2014/12/31”)的pandas.to_datetime变慢

罗昱
2023-03-14
问题内容

我有这样格式的.csv文件

timestmp, p
2014/12/31 00:31:01:9200, 0.7
2014/12/31 00:31:12:1700, 1.9
...

并且当通过读取pd.read_csv并将time str转换为datetime时pd.to_datetime,性能会急剧下降。这是一个最小的示例。

import re
import pandas as pd

d = '2014-12-12 01:02:03.0030'
c = re.sub('-', '/', d)

%timeit pd.to_datetime(d)
%timeit pd.to_datetime(c)
%timeit pd.to_datetime(c, format="%Y/%m/%d %H:%M:%S.%f")

表演有:

10000 loops, best of 3: 62.4 µs per loop
10000 loops, best of 3: 181 µs per loop
10000 loops, best of 3: 82.9 µs per loop

因此,如何pd.to_datetime从csv文件读取日期时的性能?


问题答案:

这是因为当pandasdateutil.parser.parse具有非默认格式或未format提供任何字符串时,pandas会后退以解析字符串(这更加灵活,但速度也较慢)。

如上所示,您可以通过向提供format字符串来提高性能to_datetime。或者另一个选择是使用infer_datetime_format=True

显然,infer_datetime_format当存在微秒时,无法推断。在没有这些示例的情况下,您可以看到大幅提高了速度:

In [28]: d = '2014-12-24 01:02:03'

In [29]: c = re.sub('-', '/', d)

In [30]: s_c = pd.Series([c]*10000)

In [31]: %timeit pd.to_datetime(s_c)
1 loops, best of 3: 1.14 s per loop

In [32]: %timeit pd.to_datetime(s_c, infer_datetime_format=True)
10 loops, best of 3: 105 ms per loop

In [33]: %timeit pd.to_datetime(s_c, format="%Y/%m/%d %H:%M:%S")
10 loops, best of 3: 99.5 ms per loop


 类似资料:
  • 问题内容: 可以说我有以下json 我想将其解码为以下结构 像这样 这给了我错误 如果我要手动解析它,我会这样做 但是,当时间值来自json字符串时 ,我如何使解码器以上述格式解析它? 问题答案: 在这种情况下,您需要实现自定义编组和非编组功能。 通过遵循json包的Golang文档中的示例,您将获得以下内容:

  • 问题内容: 如何在Go中解析非标准的日期/时间字符串。例如,如果我想将字符串转换为?该功能应该允许您指定格式。 http://play.golang.org/p/v5DbowXt1x 这导致了恐慌。 从逻辑上讲这是有道理的,因为它应该如何知道哪一天和哪一个月。 其他语言具有类似于以下功能: 我在Go文档中找不到这样的功能,我唯一选择正则表达式吗? 问题答案: time.Parse正在寻找一些关键值

  • 问题内容: 我尝试通过以下方式转换此日期: 但是我得到了: 问题答案: “ -0500”是UTC的偏移量,采用RFC822格式。您只想要,没有。 下表列出了Android 文档 : 符号:Z 含义:时区(RFC 822) 种类:(时区) 范例::-0800 :GMT-08:00 :-08:00 当然,我也将亲自指定语言环境:这是一种机器可读格式,而不是面向人类的格式,因此我通常会指定:

  • 为什么UUID的格式是“8-4-4-4-12”(数字)?我环顾四周,但找不到需要它的决定。 格式化为十六进制字符串的UUID示例:58d 5 e 212-165 b-4ca 0-909 b-c 86 b 9 ce 0111

  • 本文向大家介绍举例说明json的标准格式相关面试题,主要包含被问及举例说明json的标准格式时的应答技巧和注意事项,需要的朋友参考一下 JSON数值 JSON字符串 JSON数组 JSON对象 JSON对象数组 JSON数组对象

  • 问题内容: 在我的应用程序中,我想将给定的CDT格式的24小时字符串转换为CDT格式的12小时的字符串,如何将给定的24小时格式的字符串转换为12小时的格式的字符串? 问题答案: 您可以尝试使用对象转换时间格式。 这是SimpleDateFromat 的javadoc 链接。