2014-09-18 46 views
0

使用Python的熊貓庫,我導入了一個csv並將多個列設置爲我的索引。出乎意料的是,當我顯示數據框時,索引列不再存在,我不能使用索引列作爲過濾器選項。谷歌告訴我,當我設置我的索引時,我應該將'drop'設置爲False。這讓我想知道,如果我錯誤地認爲熊貓指數與SQL索引類似。在熊貓中使用索引列進行查看或過濾?

說我的數據看起來像這樣(爲股市上漲簡化虛擬爲例):

date, exchange, symbol, low, high, open, close, last 

dateexchangesymbol足以唯一標識一行。

首先,創建索引有什麼意義?它會加快查找速度,還是會增加一些對堆棧/疊加/樞軸/ groupby等有用的語義信息?它是否會減少內存使用量?

爲什麼日期,交換和符號移出數據框(並移動到索引系列?)?將它們放在數據框中,我可以將它們作爲df [df.symbol =='MSFT']進行過濾,是否有意義?我想'放棄'解決了這個問題,但事實是這不是默認意味着我誤解了這裏的某些東西。

+0

如果你還沒有看看[indexing docs](http://pandas.pydata.org/pandas-docs/stable/indexing.html)。對於你的'df [df.symbol =='MSFT']'示例,它將是'df.loc ['MSFT']' – TomAugspurger 2014-09-18 16:51:35

+0

@TomAugspurger你鏈接到的文檔對於多索引是不清楚的,它們引用一個文本基於(實驗)的查詢語言。請求符號=='MSFT AND exchange =='BATS'的數據的慣用方式是什麼? – Shahbaz 2014-09-18 17:32:09

+0

'df.loc [('MSFT','BATS')]',假設這是您的MultiIndex的順序。給它一些時間來學習,你會發現它非常直觀。 但我認爲文檔回答了你原來的問題:「創建索引的意義何在?」 1.識別數據,2.對齊3.獲取並設置 – TomAugspurger 2014-09-18 19:10:00

回答

1

索引用於選擇和排列數據幀的行。我認爲它們的方式是作爲數據框行的標籤,其中包含數據值的行。它們使您能夠使用數據框以便捷的方式存儲更高維度的數據。我發現他們開始有點棘手,但是當你調整數據集時,他們確實發光。

您需要xs方法來訪問multiindex的內層。要做你想做的事情,請嘗試以下內容。

df.xs(('BATS', 'MSFT'), level=(1, 2)) 

或者,您可以不設置索引並使用布爾索引來選擇多個條件。

bats_mask = df.exchange == 'BATS' 
msft_mask = df.symbol == 'MSFT' 
df[bats_mask & msft_mask]