pandas
имеет лучшее представление о том, что можно считать датой:
import numpy as np
import pandas as pd
arr = np.array([20181010, 20181031, 20181116, 20181012, 20181005,
20181008, 20181130, 20181011, 20181005, 20181116])
pd.to_datetime(arr.astype(str)).values
Выполнение этого для набора из 10 000 000 записей:
%%prun import numpy as np; import pandas as pd
lst = [20181010, 20181031, 20181116, 20181012, 20181005,
20181008, 20181130, 20181011, 20181005, 20181116]*1000000
arr = np.array(lst)
arr_str = arr.astype(str)
pd.to_datetime(arr_str).values
создает prun
из
ncalls tottime percall cumtime percall filename:lineno(function)
1 8.977 8.977 8.977 8.977 {method 'astype' of 'numpy.ndarray' objects}
1 4.394 4.394 4.394 4.394 {built-in method pandas._libs.tslib.array_to_datetime}
2 2.344 1.172 2.344 1.172 {built-in method pandas._libs.algos.ensure_object}
4 0.918 0.229 0.918 0.229 {built-in method numpy.core.multiarray.array}
1 0.313 0.313 7.053 7.053 datetimes.py:106(to_datetime)
...
Это достаточно эффективно.