2017-08-31 71 views
3

我讀過很多關於ILOC VS祿討論,我理解上的差異,但我不明白的是什麼之間的區別:VS熊貓伊洛與直接切片?

indexed_data['var'].iloc[0:10] 

這些似乎

indexed_data['var'][0:10] 

是一樣的東西,並提供相同的輸出。

我錯過了什麼嗎?謝謝!

回答

5

在熊貓的最新版本中,這是ix函數的工作。

但是來自熊貓0.20+ ix indexer is deprecated

所以使用get_locvar柱的位置,只有iloc選擇:

indexed_data.iloc[0:10, df.columns.get_loc('var')] 

在這兩者之間我認爲區別:

indexed_data['var'][0:10] 

和:

indexed_data['var'].iloc[0:10] 

主要在][。我認爲最好的是避免它,因爲可能chaining indexing


Modern pandas by Tom Augspurger (pandas dev) get advice

粗糙的規則是你看到的背到後面括號任何時候,] [,你是在自找麻煩。將其替換爲.loc[..., ...],您將被設置。

所以最好的是使用本地熊貓功能,如lociloc這裏。

然後嘗試比較函數調用每個方法,但一個40分鐘後,我停止它(真的很多函數被稱爲)。

我檢查定時,且每項功能的不同:

indexed_data = pd.DataFrame(np.random.randint(3, size=(2000000,1)), columns=['var']) 

In [151]: %timeit indexed_data['var'].iloc[0:100000] 
10000 loops, best of 3: 62.1 µs per loop 

In [152]: %timeit indexed_data['var'][0:100000] 
10000 loops, best of 3: 82.3 µs per loop 

In [153]: %timeit indexed_data.iloc[0:100000, indexed_data.columns.get_loc('var')] 
10000 loops, best of 3: 155 µs per loop 

In [154]: %timeit indexed_data.loc[indexed_data.index[0:100000], 'var'] 
100 loops, best of 3: 7.36 ms per loop 

#numpy approach - output is array 
In [155]: %timeit indexed_data['var'].values[0:100000] 
100000 loops, best of 3: 5.35 µs per loop 
+0

不知道'get_loc',正在尋找類似於今天早些時候的東西:) – IanS

+3

C你能解釋一下爲什麼嗎?我曾以爲用鑰匙更「pythonic」。我只是沒有區別直接切片和使用iloc。 – Rob

+1

我沒有使用ix並理解它已被棄用(在ix vs iloc vs loc上有很多帖子,我已經閱讀過它們)。 – Rob