2014-09-18 50 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]