使用panda中的索引列查看或筛选



使用Python的pandas库,我导入了一个csv,并将多个列设置为索引。出乎意料的是,当我显示数据帧时,索引列不再存在,并且我不能将索引列用作筛选器选项。谷歌告诉,当我设置索引时,我应该将"drop"设置为False。这让我怀疑,将panda索引视为类似于SQL索引是否是错误的。

假设我的数据看起来像这样(股票市场价格的简化伪示例):

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

dateexchangesymbol足以唯一地标识一行。

首先,创建索引有什么意义?它是加快了查找速度,还是添加了一些对stack/unstack/ppivot/groupby等有用的语义信息?它会减少内存使用吗?

为什么要将日期、交换和符号从数据帧中移出(并移到索引序列中?)?把它们留在数据帧中,我可以把它们作为df[df.symbol=='MSFT']进行过滤,这难道没有意义吗?我想"drop"解决了这个问题,但事实上这不是默认的,这意味着我在这里误解了一些东西。

索引用于选择和对齐数据帧的行。我认为它们是数据帧行的标签,其中的行包含数据值。它们使您能够使用数据帧以方便的方式存储更高维度的数据。我发现它们一开始有点棘手,但当你调整数据集时,它们真的会闪闪发光。

您需要xs方法来访问多索引的内部级别。要想做什么,请尝试以下操作。

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

或者,您可以避免设置索引,并使用布尔索引来选择多个条件。

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

最新更新