如何在 Pandas 中使用分层索引?
索引就像一个地址,这就是可以访问数据帧或系列中的任何数据点的方式。行和列都有索引,行索引称为索引,对于列,它是通用的列名。
分层索引
分层索引也称为多索引,即设置多个列名作为索引。在本文中,我们将使用 homeless.csv 文件。
Python3
# 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())
Python3
# using the pandas columns attribute.
col = df.columns
print(col)
Python3
# 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))
Python3
# 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))
Python3
# using the inner index 'state' for getting data.
df_ind3_state = df_ind3.loc[['Alaska', 'California', 'Idaho']]
print(df_ind3_state.head(10))
Python3
# 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
输出:
在以下数据框中,没有索引。
数据框中的列:
蟒蛇3
# 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 中的分层索引:
蟒蛇3
# 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' 是位于 main 或 level(0) 索引之下的 level(1) 索引,依此类推.因此,索引的层次结构形成,这就是为什么这被称为层次索引。
我们有时可能需要将一列作为索引,或者我们想将一个索引列转换为普通列,所以有一个pandas reset_index(inplace = True)函数,它使索引列成为普通列。
在分层索引中选择数据或使用分层索引:
为了使用 .loc() 方法从数据框中选择数据,我们必须在列表中传递索引的名称。
蟒蛇3
# 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) 的内部索引或带有元组帮助列表的主索引。
蟒蛇3
# 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 ) ) ]]
蟒蛇3
# 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
输出: