Pandas pandas.melt() 函式
Minahil Noor
2023年1月30日
2020年6月17日
-
pandas.melt()
語法 -
示例程式碼:
pandas.melt()
-
示例程式碼:
pandas.melt()
,單列為id_vars
-
示例程式碼:
pandas.melt()
與跳過列的例子 -
示例程式碼:
pandas.melt()
與多列資訊
pandas.melt()
函式重塑或轉換一個現有的 DataFrame
。它將 DataFrame
的方向從寬格式變為長格式。
pandas.melt()
語法
pandas.melt(dataframe,
id_vars,
value_vars,
var_name,
value_name,
col_level)
引數
Dataframe |
強制 | 我們要改變的是 DataFrame 的長格式 |
id_vars |
可選 | 它可以是一個元組、列表或一個 N 維的陣列。它是用於識別符號變數的列。你可以選擇一個以上的識別符號列 |
value_vars |
可選 | 它可以是一個個元組、列表或一個 N 維的陣列。。預設情況下,沒有指定為識別符號變數的列是值變數。 |
var_name |
可選 | 它是一個標量型別的變數。它是識別符號列的名稱。預設情況下,它是 variable |
value_name |
可選 | 它是一個標量型別變數。它是非識別符號列的名稱。預設情況下,它是 value |
col_level |
可選 | 它是一個整數或字串。在多索引列的情況下,我們可以使用這個引數來轉換我們的 DataFrame |
返回值
它返回一個轉換後的 DataFrame
,其中包含一個或多個識別符號列,而只有兩個非識別符號列,名為變數和值。
示例程式碼:pandas.melt()
首先,我們將只通過傳遞強制性引數即 DataFrame
來學習這個函式。
import pandas as pd
dataframe=pd.DataFrame({'Attendance': {0: 60, 1: 100, 2: 80,3: 78,4: 95},
'Name': {0: 'Olivia', 1: 'John', 2: 'Laura',3: 'Ben',4: 'Kevin'},
'Obtained Marks': {0: '90%', 1: '75%', 2: '82%',3: '64%',4: '45%'}})
dataframe1 = pd.melt(dataframe)
print(dataframe1)
我們的 DataFrame
為,
Attendance Name Obtained Marks
0 60 Olivia 90%
1 100 John 75%
2 80 Laura 82%
3 78 Ben 64%
4 95 Kevin 45%
輸出:
variable value
0 Attendance 60
1 Attendance 100
2 Attendance 80
3 Attendance 78
4 Attendance 95
5 Name Olivia
6 Name John
7 Name Laura
8 Name Ben
9 Name Kevin
10 Obtained Marks 90%
11 Obtained Marks 75%
12 Obtained Marks 82%
13 Obtained Marks 64%
14 Obtained Marks 45%
在這裡,你可以看到,在輸出中沒有識別符號列。我們有兩個非識別符號列。原來的 DataFrame
的每一列現在都是輸出 DataFrame
中的一行。
現在我們將傳遞可選的引數並檢查結果。
示例程式碼:pandas.melt()
,單列為 id_vars
import pandas as pd
dataframe=pd.DataFrame({'Attendance': {0: 60, 1: 100, 2: 80,3: 78,4: 95},
'Name': {0: 'Olivia', 1: 'John', 2: 'Laura',3: 'Ben',4: 'Kevin'},
'Obtained Marks': {0: '90%', 1: '75%', 2: '82%',3: '64%',4: '45%'}})
dataframe1 = pd.melt(dataframe,
id_vars=['Name'])
print(dataframe1)
輸出:
Name variable value
0 Olivia Attendance 60
1 John Attendance 100
2 Laura Attendance 80
3 Ben Attendance 78
4 Kevin Attendance 95
5 Olivia Obtained Marks 90%
6 John Obtained Marks 75%
7 Laura Obtained Marks 82%
8 Ben Obtained Marks 64%
9 Kevin Obtained Marks 45%
識別符號列指定為 Name
,旁邊的 variable
和 values
列則是從原始 DataFrame
中提取的值。
我們也可以指定 var_name
和 value_name
的名稱來代替預設的 variable
和 values
。
import pandas as pd
dataframe=pd.DataFrame({'Attendance': {0: 60, 1: 100, 2: 80,3: 78,4: 95},
'Name': {0: 'Olivia', 1: 'John', 2: 'Laura',3: 'Ben',4: 'Kevin'},
'Obtained Marks': {0: '90%', 1: '75%', 2: '82%',3: '64%',4: '45%'}})
dataframe1 = pd.melt(dataframe,
id_vars=['Name'],
var_name = 'Performance',
value_name = 'Success')
print(dataframe1)
輸出:
Name Performance Success
0 Olivia Attendance 60
1 John Attendance 100
2 Laura Attendance 80
3 Ben Attendance 78
4 Kevin Attendance 95
5 Olivia Obtained Marks 90%
6 John Obtained Marks 75%
7 Laura Obtained Marks 82%
8 Ben Obtained Marks 64%
9 Kevin Obtained Marks 45%
示例程式碼:pandas.melt()
與跳過列的例子
如果我們只想檢查出勤率,我們需要指定 value_vars
。
import pandas as pd
dataframe=pd.DataFrame({'Attendance': {0: 60, 1: 100, 2: 80,3: 78,4: 95},
'Name': {0: 'Olivia', 1: 'John', 2: 'Laura',3: 'Ben',4: 'Kevin'},
'Obtained Marks': {0: '90%', 1: '75%', 2: '82%',3: '64%',4: '45%'}})
dataframe1 = pd.melt(dataframe, id_vars=['Name'], value_vars='Attendance', var_name = 'Performance', value_name = 'Success')
print(dataframe1)
輸出:
Name Performance Success
0 Olivia Attendance 60
1 John Attendance 100
2 Laura Attendance 80
3 Ben Attendance 78
4 Kevin Attendance 95
它只顯示原始 DataFrame
中 Attendance
列的資訊。
示例程式碼:pandas.melt()
與多列資訊
我們在演示 DataFrame 中增加一列 ID
。
import pandas as pd
dataframe=pd.DataFrame({'Attendance': {0: 60, 1: 100, 2: 80,3: 78,4: 95},
'ID': {0: 1, 1: 2, 2: 3,3: 4,4: 5},
'Name': {0: 'Olivia', 1: 'John', 2: 'Laura',3: 'Ben',4: 'Kevin'},
'Obtained Marks': {0: '90%', 1: '75%', 2: '82%',3: '64%',4: '45%'}})
dataframe1 = pd.melt(dataframe,
id_vars=['ID', 'Name'])
print(dataframe1)
輸出:
ID Name variable value
0 1 Olivia Attendance 60
1 2 John Attendance 100
2 3 Laura Attendance 80
3 4 Ben Attendance 78
4 5 Kevin Attendance 95
5 1 Olivia Obtained Marks 90%
6 2 John Obtained Marks 75%
7 3 Laura Obtained Marks 82%
8 4 Ben Obtained Marks 64%
9 5 Kevin Obtained Marks 45%
ID
和 Name
列都被分配為識別符號列。