如果存在多索引,熊猫将不允许选择列?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如果存在多索引,熊猫将不允许选择列?相关的知识,希望对你有一定的参考价值。

我正在调试一些熊猫代码,这些代码意外地创建了MultiIndex而不是常规索引。由于索引多,Pandas不允许选择列。在这种情况下,我可以摆脱MultiIndex,但是如果确实需要该MultiIndex,那么如何选择列?附加信息-我在pandas 0.25.1中遇到此错误,但是此代码在几年前某人写的笔记本中,因此显然它曾经用于较旧版本?

import numpy as np
import pandas as pd

names = ['FirstColumn', 'SecondColumn']
data = np.array([[5,6],[7,8]])
df = pd.DataFrame(data, columns = [names]) #Bug: this "works" but isn't what you want.
#The brackets around "[names]" creates a multi-index but that was unintentional.
#But "df.head()" and "df.describe()" both look normal so you can't see anything is wrong. 

df['FirstColumn'] #ERROR! works fine with a single index, but fails with multiindex
df.FirstColumn #ERROR! works fine with a single index, but fails with multiindex
df.loc[:,'FirstColumn'] #ERROR! works fine with a single index, but fails with multiindex

[这两个陈述均对only integer scalar arrays can be converted to a scalar index产生误导性错误那么,在有多索引的情况下如何选择列?我知道一些技巧,例如unstack或更改索引等。但似乎应该有一个简单的方法?

更新:事实证明这在熊猫0.22.0中工作正常,但在0.25.1中失败。看起来引入了回归错误。我已经在熊猫github上报告了它。

答案

使用DataFrame.xs功能:

DataFrame.xs

以上是关于如果存在多索引,熊猫将不允许选择列?的主要内容,如果未能解决你的问题,请参考以下文章

熊猫添加更高级别的列多索引

熊猫列多索引中的缺失值

熊猫,多索引

如何将多索引列转换为熊猫数据框的单索引列?

熊猫:重命名多索引df中的列标签

将列添加到熊猫数据框以进行多索引