两种不同格式的pd.to_datetime的速度差异

时间:2014-06-09 01:53:17

标签: python datetime pandas

我的数据框中有2个不同的日期列,我想将其转换为datetime64。

其中一种格式为

0    2009-03-09

并且转换得相当快:

%timeit pd.to_datetime(df.acquisition_date)
10000 loops, best of 3: 97.9 µs per loop

另一个有这种格式:

0    2013-01-07 01:02:38 UTC

并且它的转换需要大约。 18倍:

%timeit pd.to_datetime(df.created_at)
1000 loops, best of 3: 1.74 ms per loop

我该怎么做才能加快速度?

编辑: 建议的一些结果(df.created_atslow格式):

%timeit pd.to_datetime(df.acquisition_date)
%timeit pd.to_datetime(df.created_at)
%timeit pd.to_datetime(df.created_at, infer_datetime_format=True)
%timeit pd.to_datetime(df.created_at, format='%Y-%m-%d %H:%M:%S %Z')
10000 loops, best of 3: 98.5 µs per loop
1000 loops, best of 3: 1.73 ms per loop
1000 loops, best of 3: 955 µs per loop
1000 loops, best of 3: 222 µs per loop

1 个答案:

答案 0 :(得分:2)

尽可能明确说明。

 > dates = pd.Series(['2013-01-07 01:02:38 UTC']*100000)
 > %timeit pd.to_datetime(dates)
 ^C
 > %timeit pd.to_datetime(dates, format='%Y-%m-%d %H:%M:%S %Z')
 1 loops, best of 3: 570 ms per loop

奇怪的是,这似乎伤害了另一种。

> dates = pd.Series(['2009-03-09']*100000)
> %timeit pd.to_datetime(dates)
10 loops, best of 3: 22.2 ms per loop
> %timeit pd.to_datetime(dates, format='%Y-%m-%d')
1 loops, best of 3: 342 ms per loop

请注意,长格式时间戳的首选形式让我们恢复了速度:

> dates = pd.Series(['2013-01-07T01:02:38Z']*100000)
> %timeit pd.to_datetime(dates)
10 loops, best of 3: 23.1 ms per loop