熊猫将convert转换为np.int,lambda和astype()之间的int差异

时间:2018-10-21 11:20:19

标签: python pandas

给出一个df

df = pd.DataFrame(['0', '1', '2', '3'], columns=['a'])

使用之间有什么区别

 df['b'] = df['a'].apply(np.int)

df['b'] = df['a'].apply(lambda x : int(x))

df['b'] = df['a'].astype(int)

我知道所有人都会给出相同的结果,但是有什么区别吗?

3 个答案:

答案 0 :(得分:0)

np.int是int的别名。

您可以通过运行以下命令进行测试:

import numpy as np
print(int == np.int)

,它将返回True。

另外:请考虑查看this question,它对您的问题有非常详尽的解释。

答案 1 :(得分:0)

下面使用pandas apply函数来迭代地使用numpy的 int 强制转换,与python的 int 强制转换相同。所以,这两个都一样。

df['b'] = df['a'].apply(np.int)
df['b'] = df['a'].apply(lambda x : int(x))

但是,astype函数将一系列转换为指定的dtype,这里的 int 对熊猫来说是 int64

df['b'] = df['a'].astype(int)

astype 是向量化函数,由于与 astype apply 方法>。

答案 2 :(得分:0)

使用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)

您会看到时差很大。