我讀過很多關於ILOC VS祿討論,我理解上的差異,但我不明白的是什麼之間的區別:VS熊貓伊洛與直接切片?
indexed_data['var'].iloc[0:10]
這些似乎
indexed_data['var'][0:10]
是一樣的東西,並提供相同的輸出。
我錯過了什麼嗎?謝謝!
我讀過很多關於ILOC VS祿討論,我理解上的差異,但我不明白的是什麼之間的區別:VS熊貓伊洛與直接切片?
indexed_data['var'].iloc[0:10]
這些似乎
indexed_data['var'][0:10]
是一樣的東西,並提供相同的輸出。
我錯過了什麼嗎?謝謝!
在熊貓的最新版本中,這是ix
函數的工作。
但是來自熊貓0.20+ ix indexer is deprecated。
所以使用get_loc
爲var
柱的位置,只有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[..., ...]
,您將被設置。
所以最好的是使用本地熊貓功能,如loc
,iloc
這裏。
然後嘗試比較函數調用每個方法,但一個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
替代解決方案:
indexed_data.loc[indexed_data.index[0:10], 'var']
請仔細閱讀Pandas docs about "Different Choices for Indexing" - 這將有助於決定使用不同的情況下,其索引...
不知道'get_loc',正在尋找類似於今天早些時候的東西:) – IanS
C你能解釋一下爲什麼嗎?我曾以爲用鑰匙更「pythonic」。我只是沒有區別直接切片和使用iloc。 – Rob
我沒有使用ix並理解它已被棄用(在ix vs iloc vs loc上有很多帖子,我已經閱讀過它們)。 – Rob