为什么在导入csv文件时使用infer_datetime_format?

时间:2018-07-28 12:54:13

标签: python performance pandas csv datetime

以下两者之间的过程区别在哪里?

df=pd.read_csv(filename, parse_dates=[0], infer_datetime_format=True)

df=pd.read_csv(filename, parse_dates=[0])

为什么第一次导入be faster? 由于parse_dates已经指定了在哪里寻找日期。

1 个答案:

答案 0 :(得分:2)

pandas.read_csv的{​​{3}}建议原因:

  

infer_datetime_format 布尔值,默认为False

     

如果启用True和parse_dates,则熊猫将尝试推断   列中日期时间字符串的格式,如果可以的话   推断,请改用解析它们的更快方法。在某些情况下   这样可以将解析速度提高5-10倍。

从本质上讲,Pandas从第一个元素中推断出datetime format ,然后假定该系列中的所有其他元素都将使用相同的格式。这意味着Pandas在尝试将字符串转换为datetime时不需要检查多种格式。

请记住,CSV文件只能保存文本数据,因此始终需要转换为datetime(本质上是数字类型)。

这是一个示范:

from dateutil import parser
from datetime import datetime

L = ['2018-01-05', '2018-12-20', '2018-03-30', '2018-04-15']*5000

%timeit [parser.parse(i) for i in L]                   # 1.57 s
%timeit [datetime.strptime(i, '%Y-%m-%d') for i in L]  # 338 ms