全文共
1258
字,預計學習時長
8
分鐘
圖源:unsplash
如何將資料集從行式變為列式?有很多種方法可以做到這一點,但pandas的melt()方法是其中最靈活的一種,你只需要學好這種就足夠了。
本文將傳授給你資料集的“乾坤大挪移”大法,使用pd。melt()或melt方法使pandas。 dataframe發生形變。一起來看看吧!
行式vs寬式資料集
如果我們將一個行式資料集與列式資料集進行比較,最容易理解行式資料集是什麼樣?
pd。melt可以使Pandas。dataframe()進行形變/堆疊
下面是相應的資料集,但是是用長表單的形式:
pd。pivot_table()可以使長pandas。dtatframe不發生形變
在開始pd。melt教程之前,先使用pd。DataFrame在Python中重新建立上面的行式資料集。
import pandas as pd# createwide dataframe
df_wide = pd。DataFrame(
{“student”: [“Andy”,“Bernie”, “Cindy”, “Deb”],
“school”: [“Z”, “Y”, “Z”,“Y”],
“english”: [10, 100, 1000,10000], # eng grades
“math”: [20, 200, 2000, 20000], # math grades
“physics”: [30, 300, 3000,30000] # physics grades
}
)
形變1
透過id_vars指定識別符號列來使資料集發生形變。“剩餘的”非識別符號列(英語,數學,物理學)將形變或彼此堆疊成一列。
我們要建立一個新的指標列(包含值英語,數學,物理),可以透過var_name重新命名該新列(cLaSs),還可以透過value_name重新命名包含所有實際成績的列(gRaDe)。
print(df_wide)
> student school english math physics
Andy Z 10 20 30
Bernie Y 100 200 300
Cindy Z 1000 2000 3000
Deb Y 10000 20000 30000df_wide。melt(id_vars=[“student”,“school”],
var_name=“cLaSs”, #rename
value_name=“gRaDe”) # rename> student school cLaSs gRaDe
0 Andy Z english 10
1 Bernie Y english 100
2 Cindy Z english 1000
3 Deb Y english 10000
4 Andy Z math 20
5 Bernie Y math 200
6 Cindy Z math 2000
7 Deb Y math 20000
8 Andy Z physics 30
9 Bernie Y physics 300
10 Cindy Z physics 3000
11 Deb Y physics 30000
行式到列式:新的指標列“cLaSs”+形變/堆疊的“gRaDe”列的值
形變2
可以使用value_vars指定要形變或堆疊到列中的列(此處不包括物理列,因此value_vars = [“ english”,“ math”]),還將從id_vars中刪除“school”列。
print(df_wide)
> student school english math physics
Andy Z 10 20 30
Bernie Y 100 200 300
Cindy Z 1000 2000 3000
Deb Y 10000 20000 30000df_wide。melt(id_vars=“student”,
value_vars=[“english”, “math”],
var_name=“cLaSs”, # rename
value_name=“gRaDe”) #rename> student cLaSs gRaDe
0 Andy english 10
1 Bernie english 100
2 Cindy english 1000
3 Deb english 10000
4 Andy math 20
5 Bernie math 200
6 Cindy math 2000
7 Deb math 2000
行式到列式:原始專欄學校和物理課程已被刪除
形變3
最後,來看看如果僅將學生列指定為識別符號列(id_vars =“ student”),但未指定要透過value_vars堆疊的列會發生什麼情況。結果是,所有非識別符號列(學校,英語,數學,物理)將被堆疊到一列中。
最終的列式資料集看起來是錯誤的,cLaSs和gRaDe列包含了不應包含的值。不過,這裡的重點是展示pd。melt的工作方式:
print(df_wide)
> student school english math physics
Andy Z 10 20 30
Bernie Y 100 200 300
Cindy Z 1000 2000 3000
Deb Y 10000 20000 30000df_wide。melt(id_vars=“student”,
var_name=“cLaSs”, #rename
value_name=“gRaDe”) #rename> student cLaSs gRaDe
0 Andy school Z
1 Bernie school Y
2 Cindy school Z
3 Deb school Y
4 Andy english 10
5 Bernie english 100
6 Cindy english 1000
7 Deb english 10000
8 Andy math 20
9 Bernie math 200
10 Cindy math 2000
11 Deb math 20000
12 Andy physics 30
13 Bernie physics 300
14 Cindy physics 3000
15 Deb physics 30000
行式到列式:學校列不是識別符號列
學好這一招,所有資料集形變都不怕。記得要自己操作一遍喲!
留言點贊關注
我們一起分享AI學習與發展的乾貨
如轉載,請後臺留言,遵守轉載規範