愛伊米

將資料集從行式變為列式?最靈活的方法——pandas的melt()方法

全文共

1258

字,預計學習時長

8

分鐘

將資料集從行式變為列式?最靈活的方法——pandas的melt()方法

圖源:unsplash

如何將資料集從行式變為列式?有很多種方法可以做到這一點,但pandas的melt()方法是其中最靈活的一種,你只需要學好這種就足夠了。

本文將傳授給你資料集的“乾坤大挪移”大法,使用pd。melt()或melt方法使pandas。 dataframe發生形變。一起來看看吧!

將資料集從行式變為列式?最靈活的方法——pandas的melt()方法

將資料集從行式變為列式?最靈活的方法——pandas的melt()方法

行式vs寬式資料集

如果我們將一個行式資料集與列式資料集進行比較,最容易理解行式資料集是什麼樣?

將資料集從行式變為列式?最靈活的方法——pandas的melt()方法

pd。melt可以使Pandas。dataframe()進行形變/堆疊

下面是相應的資料集,但是是用長表單的形式:

將資料集從行式變為列式?最靈活的方法——pandas的melt()方法

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

}

將資料集從行式變為列式?最靈活的方法——pandas的melt()方法

形變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

將資料集從行式變為列式?最靈活的方法——pandas的melt()方法

行式到列式:新的指標列“cLaSs”+形變/堆疊的“gRaDe”列的值

將資料集從行式變為列式?最靈活的方法——pandas的melt()方法

形變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

將資料集從行式變為列式?最靈活的方法——pandas的melt()方法

行式到列式:原始專欄學校和物理課程已被刪除

將資料集從行式變為列式?最靈活的方法——pandas的melt()方法

形變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

將資料集從行式變為列式?最靈活的方法——pandas的melt()方法

行式到列式:學校列不是識別符號列

學好這一招,所有資料集形變都不怕。記得要自己操作一遍喲!

將資料集從行式變為列式?最靈活的方法——pandas的melt()方法

留言點贊關注

我們一起分享AI學習與發展的乾貨

如轉載,請後臺留言,遵守轉載規範