Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么在导入csv文件时使用推断日期时间格式?_Python_Performance_Pandas_Csv_Datetime - Fatal编程技术网

Python 为什么在导入csv文件时使用推断日期时间格式?

Python 为什么在导入csv文件时使用推断日期时间格式?,python,performance,pandas,csv,datetime,Python,Performance,Pandas,Csv,Datetime,以下各项之间的流程差异在哪里: df=pd.read_csv(filename, parse_dates=[0], infer_datetime_format=True) 及 为什么第一次导入到? 因为parse_dates已经指定了在何处查找日期。forpandas.read_csv建议原因: 推断日期时间格式:布尔值,默认值为False 如果启用了True和parse_日期,pandas将尝试推断 列中日期时间字符串的格式,以及是否可以 然后,切换到更快的解析方法。在某些情况下 这可以将解

以下各项之间的流程差异在哪里:

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

为什么第一次导入到? 因为parse_dates已经指定了在何处查找日期。

for
pandas.read_csv
建议原因:

推断日期时间格式:布尔值,默认值为False

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

本质上,Pandas从第一个元素推断出
datetime
的格式,然后假设序列中的所有其他元素将使用相同的格式。这意味着熊猫在尝试将字符串转换为
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

这是否意味着,如果没有此命令,pandas将尝试检查是否有“行”,如果是,则检查每行中使用的日期时间格式?不确定您的意思。但是,在不进行推断的情况下,它将为每一行尝试多种格式,直到其中一行起作用为止。效率不高。谢谢你的帮助,我显然需要你的帮助;-)那么,这是否意味着,如果出现不同的日期,则不应使用此选项?也许我的问题应该是,推断的缺点是什么?正确。如果您有多个格式,请不要推断。
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