我在从多索引pandas框架的索引中获取列时遇到问题。
通常情况下,如果我想从一个没有多索引的常规嵌套框架中获取一个列,这很容易。我只需执行df `col_name ']或df.col_name,我就可以获取该列。然而,对于多索引嵌套框架,当我想要的列在嵌套框架的多索引中时,这不起作用。(我仍然可以得到一个常规列。)例如,如果我对多索引中的col_name执行df_name ']或df.col_name,我会得到一个错误:KeyError:'col_name'
我能想到的唯一解决方案,而不是进入疯狂的体操(df.index.get_level_values('col_name'))是以下:
df.reset_index()'col_name ']或df.reset_index().col_name
我觉得我一定是误解或错过了什么,因为选择一个列在多索引应该是容易和直接向前,因为它是非常普遍的希望。什么是一个简单的方法来选择一个单一的列从多索引?
范例:
import pandas as pd
file_name = "https://raw.githubusercontent.com/uiuc-cse/data-fa14/gh-pages/data/iris.csv"
df = pd.read_csv(file_name)
df = df.set_index(['sepal_length','sepal_width'])
print(df.head())
petal_length petal_width species
sepal_length sepal_width
5.1 3.5 1.4 0.2 setosa
4.9 3.0 1.4 0.2 setosa
4.7 3.2 1.3 0.2 setosa
4.6 3.1 1.5 0.2 setosa
5.0 3.6 1.4 0.2 setosa
df['sepal_length'] #KeyError: 'sepal_length'
df.sepal_length #KeyError: 'sepal_length'
df.loc['sepal_length'] #KeyError: 'sepal_length'
df.loc['sepal_length',:] #KeyError: 'sepal_length'
df.index.sepal_length # AttributeError: 'MultiIndex' object has no attribute 'sepal_length'
df.index['sepal_length'] #IndexError: only integers, slices (`:`), ellipsis (`...`), numpy.newaxis (`None`) and integer or boolean arrays are valid indices
字符串
2条答案
按热度按时间mi7gmzs61#
要从多索引中获取单个列,请使用
index.get_level_values()
方法。这里是Document。
字符串
测试结果:
型
flvlnr442#
在DataFrame MultiIndex中,你所说的“列”被称为一个级别。从MultiIndex中获取级别的方法是使用
pd.Index.get_level_values()
或df.reset_index()["column"]
,正如你所说的。我觉得我一定是误解或错过了一些东西,因为在多索引中选择一个列应该很容易和直接,因为这是很常见的。
我不认为这是很常见的要选择一个级别的MultiIndex.如果你发现自己想这样做经常,那么我建议你只是有这个级别作为一个适当的列在DataFrame本身.例如,你可以保留MultiIndex和有水平作为列使用
字符串
通常,DataFrame索引的目的是唯一标识DataFrame中的每一行。如果需要多条信息来唯一标识一个观测,则MultiIndex可以提供帮助。我经常使用houly时间序列数据,其中每个观测/行由日期和小时唯一定义,因此具有这两条信息的MultiIndex工作得很好。在您给予的示例中,两朵鸢尾花的萼片宽度和长度可能相同,因此将这两个指标结合起来作为索引并不是最好的选择。更好的选择是花的ID号。