首页 > 解决方案 > 为什么在导入 csv 文件时使用 infer_datetime_format?

问题描述

两者之间的过程差异在哪里:

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

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

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

标签: pythonperformancepandascsvdatetime

解决方案


文档说明了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

推荐阅读