在 Pandas 中从多索引恢复到单索引数据帧
在本文中,我们将在 pandas 数据帧中从多索引恢复为单索引。有时,当我们进行探索性数据分析或数据操作时,我们必须在数据框中进行多索引,以提取有意义的见解或高效轻松地使用列。做完数据操作后,如果我们想把我们的dataframe从多索引改为单索引,这样看起来更好看,建议把dataframe改为单索引。
索引就像一个地址,这就是可以访问数据帧或系列中的任何数据点的方式。行和列都有索引,行索引称为索引和列。
在本文中,我们将使用 homeless.csv 文件作为数据框并对其应用方法。
Python3
# importing pandas library as alias pd.
import pandas as pd
# using pandas read_csv().
df = pd.read_csv('homelessness.csv')
df.head()
Python3
# making the 'region' and 'state' column as index.
df_mi = df.set_index(['region' , 'state' , 'individuals'])
print(df_mi.head())
Python3
# using the reset_index(), reverting the
# level 0 and level 2 indexes.
df_si_level = df_mi.reset_index( level = [0 , 2] )
print(df_si_level.head())
Python3
# using the reset_index(), reverting
# the 'region' and 'state' indexes.
df_si_name = df_mi.reset_index([ 'region' , 'state' ])
print(df_si_name.head())
输出:
正如我们所看到的,这个数据框没有索引。因此,我们通过使用 pandas set_index()创建一个具有多索引的索引,将列名的名称作为列表传递。
蟒蛇3
# making the 'region' and 'state' column as index.
df_mi = df.set_index(['region' , 'state' , 'individuals'])
print(df_mi.head())
输出:
现在,数据帧具有分层索引或多索引。使用 Pandas 内置函数reset_index()将数据帧的索引从多索引恢复为单个索引。
Syntax: DataFrame.reset_index(level=None, drop=False, inplace=False, col_level=0, col_fill=”)
Returns: (Data Frame or None) DataFrame with the new index or None if inplace=True.
使用上述方式恢复多索引,即;使用 reset_index() 我们可以遵循:
- 通过使用索引的级别。
- 通过使用索引的名称。
通过使用索引的级别
使用level关键字将值传递给函数,该关键字接受我们希望从索引位置恢复的级别列表。正如我们所知,多索引形成索引的层次结构,这就是为什么它们也称为层次索引。在这个 Dataframe 中,'region' 是level(0)索引或主索引,'state' 是level(1)索引,'individuals' 是level(2)索引。通过保留“状态”索引并恢复“区域”和“个人”索引,仅将 Dataframe 转换为单个索引。
蟒蛇3
# using the reset_index(), reverting the
# level 0 and level 2 indexes.
df_si_level = df_mi.reset_index( level = [0 , 2] )
print(df_si_level.head())
输出:
通过使用索引的名称
在此方法中,只需将列表中的索引名称传递给 reset_index()。通过保留“个人”索引并恢复“区域”和“状态”索引,仅将数据框转换为单个索引,只需绕过列表中的名称即可。
蟒蛇3
# using the reset_index(), reverting
# the 'region' and 'state' indexes.
df_si_name = df_mi.reset_index([ 'region' , 'state' ])
print(df_si_name.head())
输出:
注意:如果我们希望 Dataframe 没有索引,或者我们不想将任何列作为索引,那么在这种情况下,我们可以在reset_index() 中传递所有索引或级别的名称,使 Dataframe 索引免费。