如何使用 Pandas 的分层索引
索引就像一个地址,这就是如何访问整个数据框架或系列的任何数据点。行和列都有索引,行的索引被称为索引,对于列,它是一般的列名。
分层索引
层次索引也被称为多索引,是将一个以上的列名设置为索引。在这篇文章中,我们将使用homelessness.csv文件。
# importing pandas library as alias pd
import pandas as pd
# calling the pandas read_csv() function.
# and storing the result in DataFrame df
df = pd.read_csv('homelessness.csv')
print(df.head())
输出:
在下面的数据框中,没有索引。
数据框架中的列:
# using the pandas columns attribute.
col = df.columns
print(col)
输出:
Index(['Unnamed: 0', 'region', 'state', ' individuals', 'family_members',
‘state_pop’],
dtype=’object’)
为了使列成为索引,我们使用pandas的Set_index()函数。如果我们想让一列成为索引,我们可以简单地在set_index()中以字符串的形式传递该列的名称。如果我们想做多索引或者分层索引,我们在set_index()中传递列名列表。
下面的代码演示了pandas中的分层索引:
# using the pandas set_index() function.
df_ind3 = df.set_index(['region', 'state', 'individuals'])
# we can sort the data by using sort_index()
df_ind3.sort_index()
print(df_ind3.head(10))
输出:
现在,数据框架使用的是分层索引或多索引。
请注意,这里我们做了3列索引(’region’、’state’、’individuals’)。第一个索引’region’被称为level(0)索引,它位于索引层次结构的顶端,下一个索引’state’是level(1)索引,它位于主索引或level(0)索引之下,以此类推。因此,索引的层次结构就形成了,这就是为什么这被称为层次索引。
我们有时可能需要把一个列作为索引,或者我们想把索引列转换成正常的列,所以有一个pandas reset_index(inplace = True)函数,它使索引列成为正常的列。
在分层索引中选择数据或使用分层索引:
为了使用.loc()方法从数据框架中选择数据,我们必须在一个列表中传递索引的名称。
# selecting the 'Pacific' and 'Mountain'
# region from the dataframe.
# selecting data using level(0) index or main index.
df_ind3_region = df_ind3.loc[['Pacific', 'Mountain']]
print(df_ind3_region.head(10))
输出:
我们不能只使用level(1)索引来从数据框架中获取数据,如果我们这样做的话,会出现错误。我们只能使用级别(1)索引或内部索引与级别(0)或主索引与图元的帮助列表。
# using the inner index 'state' for getting data.
df_ind3_state = df_ind3.loc[['Alaska', 'California', 'Idaho']]
print(df_ind3_state.head(10))
输出:
在图元列表的帮助下使用内部层次索引。
语法:
df.loc[[ ( level( 0 ) , level( 1 ) , level( 2 ) ) ]]
# selecting data by passing all levels index.
df_ind3_region_state = df_ind3.loc[[("Pacific", "Alaska", 1434),
("Pacific", "Hawaii", 4131),
("Mountain", "Arizona", 7259),
("Mountain", "Idaho", 1297)]]
df_ind3_region_state
输出: