區別 |python-pandas庫set_index、reset_index用法區別


 

 

1、set_index()

  • 作用:DataFrame可以通過set_index方法,將普通列設置為單索引/復合索引
  • 格式:DataFrame.set_index(keys, drop=True, append=False, inplace=False, verify_integrity=False) 
  • 參數含義:
    • keys:列標簽或列標簽/數組列表,需要設置為索引的普通列
    • drop:是否刪除原普通列,默認為True刪除用作新索引的原普通列
    • append:是否變成復合索引,默認為False,即覆蓋原索引,單索引
    • inplace:默認為False,適當修改DataFrame(不要創建新對象);
    • verify_integrity:默認為false,檢查新索引的副本。否則,請將檢查推遲到必要時進行。將其設置為false將提高該方法的性能。

 案例1:drop的使用

# drop的使用:
import pandas as pd
df = pd.DataFrame({ 'A': ['A0', 'A1', 'A2', 'A3','A4'],
                     'B': ['B0', 'B1', 'B2', 'B3','B4'],
                     'C': ['C0', 'C1', 'C2', 'C3','C4'],
                     'D': ['D0', 'D1', 'D2', 'D3','D4']})
print ('輸出結果:\n',df)
print('------')

df_drop_t = df.set_index('A',drop=True) # drop默認True,普通列被用作索引后,原列刪除
print (df_drop_t)
print('------')

df_drop_f = df.set_index('A',drop=False) # 普通列被用作索引后,原列保留
print (df_drop_f)

'''
輸出結果:
     A   B   C   D
0  A0  B0  C0  D0
1  A1  B1  C1  D1
2  A2  B2  C2  D2
3  A3  B3  C3  D3
4  A4  B4  C4  D4
------
     B   C   D
A             
A0  B0  C0  D0
A1  B1  C1  D1
A2  B2  C2  D2
A3  B3  C3  D3
A4  B4  C4  D4
------
     A   B   C   D
A                 
A0  A0  B0  C0  D0
A1  A1  B1  C1  D1
A2  A2  B2  C2  D2
A3  A3  B3  C3  D3
A4  A4  B4  C4  D4
'''

 

案例2:append的使用

# append的使用
 
import pandas as pd
df = pd.DataFrame({ 'A': ['A0', 'A1', 'A2', 'A3','A4'],
                     'B': ['B0', 'B1', 'B2', 'B3','B4'],
                     'C': ['C0', 'C1', 'C2', 'C3','C4'],
                     'D': ['D0', 'D1', 'D2', 'D3','D4']})

print ('輸出結果:\n',df)
print('------')

df_append_f = df.set_index('A', append=False) # append默認為False,普通列變為索引,並覆蓋原索引,原索引被刪除
print (df_append_f)

df_append_t = df.set_index('A', append=True) #  表示將普通列變為索引,原索引保留,變成了復合索引
print (df_append_t)
print('------')

'''
輸出結果:
     A   B   C   D
0  A0  B0  C0  D0
1  A1  B1  C1  D1
2  A2  B2  C2  D2
3  A3  B3  C3  D3
4  A4  B4  C4  D4
------
     B   C   D
A             
A0  B0  C0  D0
A1  B1  C1  D1
A2  B2  C2  D2
A3  B3  C3  D3
A4  B4  C4  D4
------
       B   C   D
  A             
0 A0  B0  C0  D0
1 A1  B1  C1  D1
2 A2  B2  C2  D2
3 A3  B3  C3  D3
4 A4  B4  C4  D4

'''

 

案例3:Inplace的使用

# inplace的使用,這里我也沒搞懂為啥輸出None
 
df = pd.DataFrame({ 'A': ['A0', 'A1', 'A2', 'A3','A4'],
                     'B': ['B0', 'B1', 'B2', 'B3','B4'],
                     'C': ['C0', 'C1', 'C2', 'C3','C4'],
                     'D': ['D0', 'D1', 'D2', 'D3','D4']})
df_inplace_f = df.set_index('A', inplace=False) # inpla默認為False,表示適當修改DataFrame(不要創建新對象)
print ('輸出結果:\n',df_inplace_f)
print('------')
    
    
df1 = pd.DataFrame({ 'A': ['A0', 'A1', 'A2', 'A3','A4'],
                     'B': ['B0', 'B1', 'B2', 'B3','B4'],
                     'C': ['C0', 'C1', 'C2', 'C3','C4'],
                     'D': ['D0', 'D1', 'D2', 'D3','D4']})

df_inplace_t = df1.set_index('A',inplace=True) # 表示原地不動
print (df_inplace_t)
print (type(df_inplace_t))


'''
輸出結果:
      B   C   D
A             
A0  B0  C0  D0
A1  B1  C1  D1
A2  B2  C2  D2
A3  B3  C3  D3
A4  B4  C4  D4
------
None
<class 'NoneType'>

'''

 

 

 

 

2、reset_index()

  • 作用:reset_index可以還原索引為普通列,重新變為默認的整型索引
    • (注:reset_index還原分為兩種類型,第一種是對原DataFrame進行reset,第二種是對使用過set_index()函數的DataFrame進行reset)
  • 格式:DataFrame.reset_index(level=None, drop=False, inplace=False, col_level=0, col_fill=”) 
  • 參數含義:
    • level:int、str、tuple或list,默認無,僅從索引中刪除給定級別。默認情況下移除所有級別。控制了具體要還原的那個等級的索引 
    • drop:索引被還原成普通列后,是否刪掉列。默認為False,為False時則索引列會被還原為普通列,否則被還原后的的列又會被瞬間刪掉;
    • inplace:默認為false,適當修改DataFrame(不要創建新對象);
    • col_level:int或str,默認值為0,如果列有多個級別,則確定將標簽插入到哪個級別。默認情況下,它將插入到第一級;
    • col_fill:對象,默認‘’,如果列有多個級別,則確定其他級別的命名方式。如果沒有,則重復索引名;
  • 情況(1):對原DataFrame進行reset
# 一般情況下參數只使用到drop,這里只演示drop的使用
import pandas as pd
df = pd.DataFrame({ 'A': ['A0', 'A1', 'A2', 'A3','A4'],
                     'B': ['B0', 'B1', 'B2', 'B3','B4'],
                     'C': ['C0', 'C1', 'C2', 'C3','C4'],
                     'D': ['D0', 'D1', 'D2', 'D3','D4']})
print ('輸出結果\ndf:\n',df)
print('------')

df1 = df.reset_index(drop=False) # 默認為False,原有的索引不變,添加一列,列名index;
print (df1)
print('------')

df2 = df.reset_index(drop=True) # 索引被還原為普通列,瞬間又被刪掉了,同時在原位置重置原始索引012...;
print (df2)

'''
輸出結果
df:
     A   B   C   D
0  A0  B0  C0  D0
1  A1  B1  C1  D1
2  A2  B2  C2  D2
3  A3  B3  C3  D3
4  A4  B4  C4  D4
------
   index   A   B   C   D
0      0  A0  B0  C0  D0
1      1  A1  B1  C1  D1
2      2  A2  B2  C2  D2
3      3  A3  B3  C3  D3
4      4  A4  B4  C4  D4
------
    A   B   C   D
0  A0  B0  C0  D0
1  A1  B1  C1  D1
2  A2  B2  C2  D2
3  A3  B3  C3  D3
4  A4  B4  C4  D4
'''

 

  • 情況(2)對使用過set_index()函數的DataFrame進行reset
# 一般情況下參數只使用到drop,這里只演示drop的使用
import pandas as pd
df = pd.DataFrame({ 'A': ['A0', 'A1', 'A2', 'A3','A4'],
                     'B': ['B0', 'B1', 'B2', 'B3','B4'],
                     'C': ['C0', 'C1', 'C2', 'C3','C4'],
                     'D': ['D0', 'D1', 'D2', 'D3','D4']})
print ('輸出結果:\ndf:\n' ,df)
print('------')
newdf = df.set_index('A') # 這里的drop必需為True(默認為這里的drop必需為True),否則會報錯ValueError: cannot insert A, already exists(意思是...只可意會不可言傳哈哈)
print (newdf)
print('------')

newdf1 = newdf.reset_index(drop=False) #索引列會被還原為普通列
print (newdf1)
print('------')

newdf2 = newdf.reset_index(drop=True) #索引被還原為普通列,瞬間又被刪掉了,同時在原位置重置原始索引;
print (newdf2)

'''
輸出結果:
df:
     A   B   C   D
0  A0  B0  C0  D0
1  A1  B1  C1  D1
2  A2  B2  C2  D2
3  A3  B3  C3  D3
4  A4  B4  C4  D4
------
     B   C   D
A             
A0  B0  C0  D0
A1  B1  C1  D1
A2  B2  C2  D2
A3  B3  C3  D3
A4  B4  C4  D4
------
    A   B   C   D
0  A0  B0  C0  D0
1  A1  B1  C1  D1
2  A2  B2  C2  D2
3  A3  B3  C3  D3
4  A4  B4  C4  D4
------
    B   C   D
0  B0  C0  D0
1  B1  C1  D1
2  B2  C2  D2
3  B3  C3  D3
4  B4  C4  D4
'''

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM