簡體   English   中英

熊貓將convert轉換為np.int,lambda和astype()之間的int差異

[英]pandas apply convert to int differences between np.int, lambda and astype()

給定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)

我知道所有人都會得到相同的結果,但是有什么區別嗎?

np.int是int的別名。

您可以通過運行以下命令進行測試:

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

這將返回True。

另外:考慮查看該問題該問題對您的問題有非常詳盡的解釋。

下面使用pandas apply函數來迭代地使用numpy的int cast與python的int cast相同。 因此,這兩個都一樣。

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方法。

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

如您所見,時差巨大。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM