Pandas詳解十四之DataFrame物件的列和索引之間的轉化
阿新 • • 發佈:2019-01-10
約定:
import pandas as pd
DataFrame物件的列和索引之間的轉化
我們常常需要將DataFrame物件中的某列或某幾列作為索引,或者將索引轉化為物件的列。pandas提供了set_index()/reset_index() 來供我們使用。
一、列轉化為索引
df1=pd.DataFrame({'X':range(5),'Y':range(5),'S':list("aaabb"),'Z':[1,1,2,2,2]})
df1
程式碼結果:
S | X | Y | Z | |
---|---|---|---|---|
0 | a | 0 | 0 | 1 |
1 | a | 1 | 1 | 1 |
2 | a | 2 | 2 | 2 |
3 | b | 3 | 3 | 2 |
4 | b | 4 | 4 | 2 |
- 指定列為索引
df1.set_index('S')
程式碼結果:
X | Y | Z | |
---|---|---|---|
S | |||
a | 0 | 0 | 1 |
a | 1 | 1 | 1 |
a | 2 | 2 | 2 |
b | 3 | 3 | 2 |
b | 4 | 4 | 2 |
- 指定多個列作為多級索引
df1.set_index(['S' ,'Z'])
程式碼結果:
X | Y | ||
---|---|---|---|
S | Z | ||
a | 1 | 0 | 0 |
1 | 1 | 1 | |
2 | 2 | 2 | |
b | 2 | 3 | 3 |
2 | 4 | 4 |
- 同時保留作為索引的列
df1.set_index(['S','Z'],drop=False)
程式碼結果:
S | X | Y | Z | ||
---|---|---|---|---|---|
S | Z | ||||
a | 1 | a | 0 | 0 | 1 |
1 | a | 1 | 1 | 1 | |
2 | a | 2 | 2 | 2 | |
b | 2 | b | 3 | 3 | 2 |
2 | b | 4 | 4 | 2 |
二、索引轉化為列
df2=df1.set_index(['S','Z'])
df2
程式碼結果:
X | Y | ||
---|---|---|---|
S | Z | ||
a | 1 | 0 | 0 |
1 | 1 | 1 | |
2 | 2 | 2 | |
b | 2 | 3 | 3 |
2 | 4 | 4 |
- 將單個索引作為DataFrame物件的列
df2.reset_index('Z')
程式碼結果:
Z | X | Y | |
---|---|---|---|
S | |||
a | 1 | 0 | 0 |
a | 1 | 1 | 1 |
a | 2 | 2 | 2 |
b | 2 | 3 | 3 |
b | 2 | 4 | 4 |
- 將多級索引作為列
df2.reset_index()
程式碼結果:
S | Z | X | Y | |
---|---|---|---|---|
0 | a | 1 | 0 | 0 |
1 | a | 1 | 1 | 1 |
2 | a | 2 | 2 | 2 |
3 | b | 2 | 3 | 3 |
4 | b | 2 | 4 | 4 |
- 直接刪除對指定索引
df2.reset_index('Z',drop=True)
程式碼結果:
X | Y | |
---|---|---|
S | ||
a | 0 | 0 |
a | 1 | 1 |
a | 2 | 2 |
b | 3 | 3 |
b | 4 | 4 |
- 直接對原DataFrame物件修改
df2.reset_index(inplace=True)
df2
程式碼結果:
S | Z | X | Y | |
---|---|---|---|---|
0 | a | 1 | 0 | 0 |
1 | a | 1 | 1 | 1 |
2 | a | 2 | 2 | 2 |
3 | b | 2 | 3 | 3 |
4 | b | 2 | 4 | 4 |
謝謝大家的瀏覽,
希望我的努力能幫助到您,
共勉!