python - 为什么在导入 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 已经指定了在哪里查找日期。
解决方案
文档说明了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
推荐阅读
- ruby-on-rails - paper_trail gem 保存版本与 object_changes nil
- python-2.7 - 无法导入名称抑制 Python 2.7
- python-3.x - 在条件字典理解中找不到类范围内的变量
- python - 防止 tcpreplay 阻塞 Mininet Python API cmds
- azure - golang COSMOS DB,快速入门,缺少环境变量 AZURE_DATABASE
- c# - 如何更新 Azure 表存储中的实体?
- java - Spring Boot 和 buildResponseEntity()
- ios - 更改其他设备上的文本字段高度
- java - 无法删除 Hibernate 中的嵌套实体
- javascript - javascript 不支持正向 Lookbehind