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
列都被分配为标识符列。