簡體   English   中英

Pandas iloc 或轉置切片轉置

[英]Pandas iloc or transpose slice transpose

雖然我知道兩者都會產生相同的結果,但效率更高,為什么。

#dataframe with shape 20,20
#slicing the first 10 columns

import pandas as pd
import numpy as np
df = pd.DataFrame(np.arange(400).reshape(20,20))

df.T[:10].T
#or 
df.iloc[:,:10]

差異可能可以忽略不計,並且iloc是最佳實踐,因為它更具可讀性。 我想知道一些優點和缺點。

.iloc[]專門設計為盡可能高效。 執行兩次轉置涉及大量數據移動,並且速度必然會變慢。

兩者之間的性能差異是可以衡量的,並且隨着 dataframe 尺寸的增加而變得更加顯着。 使用timeit.timeit()測量時間:

對於一個小數組:

>>> df = pd.DataFrame(np.arange(400).reshape(20,20))
>>> timeit("x = df.T[:10].T", globals=globals(), number=100)
0.04253590002190322
>>> timeit("x = df.iloc[:,:10]", globals=globals(), number=100)
0.006828900019172579

對於大型數組,差異更明顯:

>>> df = pd.DataFrame(np.arange(400000000).reshape(20000,20000))
>>> timeit("x = df.T[:10].T", globals=globals(), number=100)
0.5803892000112683
>>> timeit("x = df.iloc[:,:10]", globals=globals(), number=100)
0.00561390002258122

對於轉置方法,這大約慢了 100 倍。

暫無
暫無

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

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