[英]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.