Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.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 是否有比pd.to_datetime更快的日期转换?_Python_Date_Date Conversion - Fatal编程技术网

Python 是否有比pd.to_datetime更快的日期转换?

Python 是否有比pd.to_datetime更快的日期转换?,python,date,date-conversion,Python,Date,Date Conversion,我正在尝试将2017年1月1日格式的pandas数据框中的日期转换为python格式,以便提取一周中的某一天。 我一直在使用: df['Date'] = pd.to_datetime(df['Date']) df['DOW'] = df['Date'].dt.weekday_name 但是第一行大约需要250µs,我有超过100万个日期要转换 有更快的方法吗?将pd.的format参数添加到_datetime中,因为您知道格式是什么,所以速度将提高约40倍 pd.to_datetime(df[

我正在尝试将2017年1月1日格式的pandas数据框中的日期转换为python格式,以便提取一周中的某一天。 我一直在使用:

df['Date'] = pd.to_datetime(df['Date'])
df['DOW'] = df['Date'].dt.weekday_name
但是第一行大约需要250µs,我有超过100万个日期要转换


有更快的方法吗?

pd.的
format
参数添加到_datetime
中,因为您知道格式是什么,所以速度将提高约40倍

pd.to_datetime(df['Date'], format='%d/%m/%Y')
对我来说大约需要4秒钟

此外,这有点不太准确,但如果您知道可能日期的上下限,则可以使用所有可能字符串的映射来连接数据:

dates = pd.date_range(pd.Timestamp.min, pd.Timestamp.max)
date_mappings = pd.Series(dates, index=dates.strftime('%d/%m/%Y'), name='Date')
df = df.join(date_mappings, on='Date', lsuffix='_str')

这在我的计算机上花费了<1秒,如果您知道可能日期的界限,可能会进一步减少您有固定的日期时间格式吗?文件说,通过将其设置为
True
,可以将速度提高5-10倍。到目前为止,你没有提供我能看到的任何格式字符串。所有日期都是2017年1月1日的格式,我不在乎它们转换成什么格式,只要我能提取一周中的某一天。我希望这能回答你的问题。我想提供一个格式字符串会比
推断日期时间\u格式
更快。哇。使用infer_datetime_格式将速度提高了45倍。谢谢欢迎正如我在上一篇评论中所说的,我可以想象,如果你明确给出了格式,那么它就不需要去推断它,你可以更快。时间是丑陋的;我喜欢
dateparser
(非熊猫)模块,因为它在原型设计方面的灵活性,但开销太大了;我根本不明白那里发生了什么:)有没有明确的理由说明为什么
date\u range
应该比提供固定的日期格式更快?这实际上让我很困惑,
pandas
到datetime
依赖Python吗?我必须进一步研究这个问题,谢谢你指出!hacky版本将日期字符串映射到所有日期的日期,而不考虑输入数据。因此,它可以与映射合并,而不是将数据中每一行的每个日期字符串转换为日期
pd.date\u range
只是给出了一个有效日期序列,以便精确地进行映射。或者,您也可以不为所有日期进行映射,而只为数据中唯一的日期字符串进行映射:
date\u mappings=pd.to\u datetime(df.set\u index('date',drop=False)。date.drop\u duplicates(),format='%d/%m/%Y')
我想这让我觉得很不舒服,因为它没有使用“一种明显的方式”使用
pd.to\u datetime
的方法,并以迂回的方式获得结果。一个可能的陷阱是,如果存在格式不正确的字符串,它将返回NaT,而
pd.to_datetime
将引发错误(在版本>=0.17中,在旧版本中,它将以字符串的形式静默保留所有内容)。