我有一个这种格式的 .csv 文件
timestmp, p
2014/12/31 00:31:01:9200, 0.7
2014/12/31 00:31:12:1700, 1.9
...
当通过阅读时pd.read_csv
并将时间字符串转换为日期时间使用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 文件读取日期时?
这是因为 pandas 回落到dateutil.parser.parse
用于在字符串具有非默认格式或没有时解析字符串format
提供字符串(这更灵活,但也更慢)。
如上所示,您可以通过提供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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)