0
我有下面的代碼:熊貓數據框 - 更快適用?
from dateutil import parser
df.local_time = df.local_time.apply(lambda x: parser.parse(x))
這似乎是採取過於長的時間。我怎樣才能讓它更快?
我有下面的代碼:熊貓數據框 - 更快適用?
from dateutil import parser
df.local_time = df.local_time.apply(lambda x: parser.parse(x))
這似乎是採取過於長的時間。我怎樣才能讓它更快?
您應該使用pd.to_datetime
來加快日期時間轉換。例如,假設你有這樣的數據:
In [1]: import pandas as pd
dates = pd.date_range('2015', freq='min', periods=1000)
dates = [d.strftime('%d %b %Y %H:%M:%S') for d in dates]
dates[:5]
Out[1]:
['01 Jan 2015 00:00:00',
'01 Jan 2015 00:01:00',
'01 Jan 2015 00:02:00',
'01 Jan 2015 00:03:00',
'01 Jan 2015 00:04:00']
你可以得到datetime對象是這樣的:
In [2]: pd.to_datetime(dates[:5])
Out[2]:
DatetimeIndex(['2015-01-01 00:00:00', '2015-01-01 00:01:00',
'2015-01-01 00:02:00', '2015-01-01 00:03:00',
'2015-01-01 00:04:00'],
dtype='datetime64[ns]', freq=None)
但是,這仍然可以在某些情況下慢。在真的快速從字符串轉換日期,你知道所有日期具有相同的格式,你可以指定format
參數(例如在這裏,format='%d %b %Y %H:%M:%S'
)或更多自動,使用infer_datetime_format=True
,使格式將被推斷只有一次和用於其他條目。隨着數組大小的增加,這可能會導致一些很好的加速(但只有在所有格式都一致的情況下才能起作用!)。
例如,這些字符串1000週上的日期我在上面定義的:
from dateutil import parser
ser = pd.Series(dates)
%timeit ser.apply(lambda x: parser.parse(x))
10 loops, best of 3: 91.1 ms per loop
%timeit pd.to_datetime(dates)
10 loops, best of 3: 139 ms per loop
%timeit pd.to_datetime(dates, format='%d %b %Y %H:%M:%S')
100 loops, best of 3: 5.96 ms per loop
%timeit pd.to_datetime(dates, infer_datetime_format=True)
100 loops, best of 3: 6.79 ms per loop
我們通過指定或pd.to_datetime()
推斷日期時間格式獲得約20加速的一個因素。
'to_datetime'怎麼樣? – IanS
你應該避免'apply'並使用'to_datetime':'df ['local_time'] = pd.to_datetime(df ['local_time'])' – EdChum