我的数据框中有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_at
是slow
格式):
%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
答案 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