pandas使用之宽表变窄表的实现

1. 宽表与窄表介绍

在数据分析过程中,经常会遇到宽表(wide table)和窄表(long table)的概念。

宽表即数据的列数多于行数,每一列代表一个特征或属性。而窄表则相反,每一行代表一个观测实例,每一列包含实例的特征。

宽表通常在数据可视化和数据维度分析中使用较多。而窄表则更适用于建模和模型训练中。

2. 为何需要进行宽表变窄表

在实际的数据分析工作中,我们有时会遇到宽表的数据,并且我们需要将其转换为窄表,以满足一定的分析需求。

一种常见的场景是,我们需要将宽表进行透视,将其中的一些列(特征)作为新的行索引,并将这些列的值转换为新的列。这样可以为后续的分析提供更方便的数据结构。

另一种场景是,在机器学习模型的输入数据要求中,有一些模型要求输入格式为窄表,这时我们就需要将宽表进行转换。

3. pandas实现宽表变窄表的方法

3.1 使用melt函数

在pandas中,我们可以使用melt函数将宽表转换为窄表。melt函数的主要参数有id_vars、value_vars和var_name。

id_vars表示要保留在窄表中的列名,value_vars表示要进行转换的宽表的列名,var_name表示转换后的窄表中列名的名称。

下面是一个示例:

import pandas as pd

# 创建宽表

wide_table = pd.DataFrame({

'Name': ['Alice', 'Bob', 'Charlie'],

'Math': [90, 80, 70],

'English': [85, 75, 65],

'Science': [95, 85, 75]

})

# 使用melt函数转换为窄表

narrow_table = wide_table.melt(id_vars='Name', value_vars=['Math', 'English', 'Science'], var_name='Subject', value_name='Score')

print(narrow_table)

输出结果如下:

Name Subject Score

0 Alice Math 90

1 Bob Math 80

2 Charlie Math 70

3 Alice English 85

4 Bob English 75

5 Charlie English 65

6 Alice Science 95

7 Bob Science 85

8 Charlie Science 75

如上所示,通过使用melt函数,我们成功将宽表转换为了窄表。

3.2 使用pivot函数

pandas还提供了pivot函数来进行宽表转窄表的操作。pivot函数的主要参数有index、columns和values。

index表示窄表的索引列,在转换过程中唯一标识每一行的列名。

columns表示窄表中的列名,在转换过程中,每个唯一的值会变成输出的列名。

values表示窄表中的值,将被填充到新生成的窄表的列中。

下面是一个示例:

import pandas as pd

# 创建宽表

wide_table = pd.DataFrame({

'Name': ['Alice', 'Bob', 'Charlie'],

'Subject': ['Math', 'Math', 'Math'],

'Score': [90, 80, 70]

})

# 使用pivot函数转换为窄表

narrow_table = wide_table.pivot(index='Name', columns='Subject', values='Score')

print(narrow_table)

输出结果如下:

Subject Math

Name

Alice 90

Bob 80

Charlie 70

如上所示,通过使用pivot函数,我们成功将宽表转换为了窄表。

4. 总结

本文介绍了宽表和窄表的概念,并通过pandas的melt函数和pivot函数演示了如何实现宽表向窄表的转换。

在进行数据分析工作时,根据具体的需求选择适当的转换方法,能够更方便地对数据进行进一步分析和建模。

后端开发标签