📅  最后修改于: 2023-12-03 15:22:14.363000             🧑  作者: Mango
Pandas 是 Python 中非常流行的数据处理库之一。在 Pandas 中,使用数据帧(DataFrame)存储和处理数据。数据帧可以看作是类似于电子表格的一种数据结构,其中每一列可以是不同的数据类型。Pandas 提供了许多方法来操作数据帧,其中包括重塑数据帧的功能。
重塑数据帧是将数据帧从一种形式转换为另一种形式的过程。这个过程通常涉及到将数据帧的行和列进行重新排列、合并或拆分。在 Pandas 中,有两个重要的函数可以用来重塑数据帧:melt
和 unmelt
。
melt
函数操作的目标是将数据帧从“宽格式”转换为“长格式”。所谓的“宽格式”是指每一列代表了不同的变量,而“长格式”是指所有的变量都存储在同一列中,并且使用一个额外的列来区分不同变量的情况。
假设我们有一个数据帧,其中有三列:日期、早餐和午餐。每一行都代表了一个人在某个日期吃了什么样的饭菜。在这种情况下,我们可以使用 melt
函数将数据帧从宽格式转换为长格式:
import pandas as pd
df_wide = pd.DataFrame({
"date": ["2022-01-01", "2022-01-02", "2022-01-03"],
"breakfast": ["eggs", "toast", "bacon"],
"lunch": ["salad", "soup", "sandwich"]
})
df_long = pd.melt(df_wide, id_vars=["date"], value_vars=["breakfast", "lunch"], var_name="meal", value_name="food")
print(df_long)
输出结果如下:
date meal food
0 2022-01-01 breakfast eggs
1 2022-01-02 breakfast toast
2 2022-01-03 breakfast bacon
3 2022-01-01 lunch salad
4 2022-01-02 lunch soup
5 2022-01-03 lunch sandwich
melt
函数接受三个参数:
id_vars
:指定需要保留的列;value_vars
:指定需要进行重塑的列;var_name
:指定新增列的列名;value_name
:指定新增列里的值的列名。从运行结果可以看出,新数据帧 df_long
有三列:日期、用餐时间和食物。在这个新的数据帧中,每个日期有两行,分别代表了早餐和午餐的食物。
与 melt
函数相反,unmelt
函数操作的目标是将数据帧从“长格式”转换为“宽格式”。在这种情况下,一个额外的列(比如说用餐时间)将变成原数据帧的列名。
假设我们有一个数据帧,其中包含了日期、用餐时间和食物三列。在这个案例中,我们可以使用 unmelt
函数将数据帧从长格式转换为宽格式:
df_wide = df_long.pivot(index="date", columns="meal", values="food").reset_index()
print(df_wide)
输出结果如下:
meal date breakfast lunch
0 2022-01-01 eggs salad
1 2022-01-02 toast soup
2 2022-01-03 bacon sandwich
在这个新的数据帧中,每一列代表了不同的用餐时间,而每一行代表了不同的日期。可以发现,在这个新数据帧中,我们并没有用到传统的列名。相反,用餐时间成为了列名,而日期成为了索引。
在 Pandas 中,使用 melt
和 unmelt
函数可以轻松地重塑数据帧。这些函数提供了一种从不同角度解析数据帧的方式,使我们可以更方便地对数据进行研究和分析。