Когда вы используете apply
, он работает, зацикливая данные и изменяя dtype каждого значения на целое число.Таким образом, они медленнее по сравнению с astype
df = pd.DataFrame(pd.np.arange(10**7).reshape(10**4, 10**3)).astype(str)
# Performance
%timeit df[0].apply(np.int)
7.15 ms ± 319 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
%timeit df[0].apply(lambda x : int(x))
9.57 ms ± 405 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
Оба схожи по производительности.
Здесь astype
, которая оптимизирована для работы быстрее, чем применяется.
%timeit df[0].astype(int)
1.94 ms ± 96.9 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
И если вы ищете гораздо более быстрый подход, мы должны выбрать векторизованный подход, который может обеспечить numpy массивов.
%timeit df[0].values.astype(np.int)
1.26 ms ± 19.4 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
Как видите, разница во времени огромна.