📜  在 Pandas 中从多索引恢复到单索引数据帧

📅  最后修改于: 2022-05-13 01:55:46.077000             🧑  作者: Mango

在 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()将数据帧的索引从多索引恢复为单个索引。

使用上述方式恢复多索引,即;使用 reset_index() 我们可以遵循:



  1. 通过使用索引的级别。
  2. 通过使用索引的名称。

通过使用索引的级别

使用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 索引免费。