【问题标题】:speed difference for pd.to_datetime for 2 different formats2 种不同格式的 pd.to_datetime 速度差异
【发布时间】:2014-06-09 01:53:16
【问题描述】:

我的数据框中有 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

【问题讨论】:

  • 尝试传递 infer_datetime_format=True

标签: python datetime pandas


【解决方案1】:

尽可能明确。

 > 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-25
    • 1970-01-01
    • 1970-01-01
    • 2013-01-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多