当您使用 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)
如您所见,时差很大。