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

rul*_*l30 4 python csv performance datetime pandas

过程区别在哪里:

df=pd.read_csv(filename, parse_dates=[0], infer_datetime_format=True)
Run Code Online (Sandbox Code Playgroud)

df=pd.read_csv(filename, parse_dates=[0])
Run Code Online (Sandbox Code Playgroud)

为什么第一个导入更快?由于 parse_dates 已经指定了在哪里查找日期。

jpp*_*jpp 6

文档pandas.read_csv说明为什么:

infer_datetime_format :布尔值,默认为 False

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

本质上,Pandas从第一个元素推断出你的格式datetime然后假设系列中的所有其他元素将使用相同的格式。这意味着 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
Run Code Online (Sandbox Code Playgroud)

  • 不明白你的意思。但是没有推断,它会为每一行尝试多种格式,直到一种有效。效率不高。 (3认同)
  • 正确的。如果您有不止一种格式,请不要推断。 (2认同)