大家好,在数据处理与分析中,经常遇到数据需要进行格式转换的情况,例如将数据从宽表格式转换为长表格式,或将数据重新分组汇总。Pandas提供了丰富的reshape操作,尤其是melt和pivot这两个函数,使得DataFrame可以在宽表与长表之间高效转换。通过合理使用melt和pivot,可以在数据清洗、特征工程等环节中极大地提升工作效率。
1. melt操作:宽表转换为长表
1.1 melt的基本语法
在Pandas中,melt和pivot函数用于重塑DataFrame的结构,melt用于将宽表格式转换为长表格式,通常用于将多列数据合并到一列中,pivot用于将长表格式转换为宽表格式,通常用于将唯一值展开为多列。
melt函数的基本语法如下:
pd.melt(frame, id_vars=None, value_vars=None, var_name=None, value_name='value')
frame:要转换的DataFrame。
id_vars:不需要被转换的列,这些列将在转换后的DataFrame中保持不变。
value_vars:需要被转换的列,默认会转换除id_vars以外的所有列。
var_name:在转换后的DataFrame中,新列的列名,表示变量名。
value_name:在转换后的DataFrame中,新列的列名,表示变量值。
1.2 将宽表转换为长表
以下是一个包含学生成绩的宽表数据,希望将其转换为长表格式,以便分析各科成绩。
import pandas as pd
# 创建示例数据
data = {
'姓名': ['Alice', 'Bob', 'Charlie'],
'数学': [85, 90, 95],
'英语': [78, 82, 88],
'物理': [92, 87, 94]
}
df = pd.DataFrame(data)
print("原始数据:\n", df)
原始数据如下:
姓名 数学 英语 物理
0 Alice 85 78 92
1 Bob 90 82 87
2 Charlie 95 88 94
1.3 使用melt将宽表转换为长表
希望将每个学生的成绩数据重塑为包含姓名、科目和分数的长表格式。可以使用melt实现:
# 使用 melt 将宽表转换为长表
melted_df = pd.melt(df, id_vars=['姓名'], var_name='科目', value_name='分数')
print("长表格式数据:\n", melted_df)
转换后的数据如下:
Python中melt和pivot实现DataFrame格式转换

最低0.47元/天 解锁文章
722

被折叠的 条评论
为什么被折叠?



