在数据分析和处理过程中,常常需要将宽格式的数据转换为长格式的数据,以便更好地适应分析需求。pandas.wide_to_long
是 Pandas 提供的一个函数,用于将宽格式数据重塑为长格式数据。长格式数据在处理多变量数据、时间序列分析和绘图时更为方便和实用。本文将详细介绍 pandas.wide_to_long
的用途和用法,包括其参数详解、示例代码以及进阶使用技巧。
🧑 博主简介:现任阿里巴巴嵌入式技术专家,15年工作经验,深耕嵌入式+人工智能领域,精通嵌入式领域开发、技术管理、简历招聘面试。CSDN优质创作者,提供产品测评、学习辅导、简历面试辅导、毕设辅导、项目开发、C/C++/Java/Python/Linux/AI等方面的服务,如有需要请站内私信或者联系任意文章底部的的VX名片(ID:
gylzbk
)
💬 博主粉丝群介绍:① 群内初中生、高中生、本科生、研究生、博士生遍布,可互相学习,交流困惑。② 热榜top10的常客也在群里,也有数不清的万粉大佬,可以交流写作技巧,上榜经验,涨粉秘籍。③ 群内也有职场精英,大厂大佬,可交流技术、面试、找工作的经验。④ 进群免费赠送写作秘籍一份,助你由写作小白晋升为创作大佬。⑤ 进群赠送CSDN评论防封脚本,送真活跃粉丝,助你提升文章热度。有兴趣的加文末联系方式,备注自己的CSDN昵称,拉你进群,互相学习共同进步。
【Pandas】pandas.wide_to_long详解与实战应用:宽格式数据重塑的利器,用于将宽格式数据重塑为长格式数据。长格式数据在处理多变量数据、时间序列分析和绘图时更为方便和实用
1.简介 📘
在数据分析和处理过程中,常常需要将宽格式的数据转换为长格式的数据,以便更好地适应分析需求。pandas.wide_to_long
是 Pandas 提供的一个函数,用于将宽格式数据重塑为长格式数据。长格式数据在处理多变量数据、时间序列分析和绘图时更为方便和实用。本文将详细介绍 pandas.wide_to_long
的用途和用法,包括其参数详解、示例代码以及进阶使用技巧。
2.什么是pandas.wide_to_long 🧩
pandas.wide_to_long
是 Pandas 提供的用于将宽格式数据(wide format)转换为长格式数据(long format)的一个函数。它允许将包含多个观察变量的列重塑成一个单一列,并保留其原始的行索引和其他列数据。
3.为什么使用pandas.wide_to_long 🤔
使用 pandas.wide_to_long
有以下几个优点:
- 数据重塑:能够快速将宽格式数据重塑为长格式,便于时间序列分析和绘图。
- 简洁性:语法简洁,能够方便地完成数据重塑操作。
- 灵活性:支持多列同时重塑,满足复杂的数据重塑需求。
4.pandas.wide_to_long方法详解 🔍
4.1 函数签名 🖊️
pandas.wide_to_long(df, stubnames, i, j, sep='', suffix='\\d+')
4.2 参数解释 📝
df
: 类型:DataFrame。说明:待重塑的宽格式数据。stubnames
: 类型:str or list-like。说明:宽格式数据中的列名的前缀。i
: 类型:str or list-like。说明:唯一标识每个观察值的列名。j
: 类型:str。说明:通过不同级别的观测后缀标识的级别名称。sep
: 类型:str, default ‘’。说明:stubnames
和j
之间的分隔符。suffix
: 类型:str, default ‘\d+’。说明:用于匹配stubnames
后缀的正则表达式str。
4.3 返回值 📤
返回一个重塑后的 DataFrame。
4.4 示例代码 👨💻
4.4.1 基本用法 💾
首先,我们来看看一个基本用法,将宽格式的数据转换为长格式。
import pandas as pd
# 创建一个示例 DataFrame,表示宽格式数据
data = pd.DataFrame({
'ID': [1, 2, 3],
'Year': [2020, 2020, 2020],
'Test_A1': [85, 90, 78],
'Test_A2': [88, 92, 80],
'Test_B1': [84, 87, 77],
'Test_B2': [85, 90, 78]
})
print("Original DataFrame:")
print(data)
# 使用 pandas.wide_to_long 进行数据重塑
long_data = pd.wide_to_long(data, stubnames=['Test_A', 'Test_B'], i='ID', j='Variable', sep='_', suffix='\\d+')
print("\nReshaped to Long DataFrame:")
print(long_data.reset_index())
以上代码将宽格式的测试数据转换为长格式。输出结果如下:
Original DataFrame:
ID Year Test_A1 Test_A2 Test_B1 Test_B2
0 1 2020 85 88 84 85
1 2 2020 90 92 87 90
2 3 2020 78 80 77 78
Reshaped to Long DataFrame:
ID Year Variable Test_A Test_B
0 1 2020 1 85 84
1 1 2020 2 88 85
2 2 2020 1 90 87
3 2 2020 2 92 90
4 3 2020 1 78 77
5 3 2020 2 80 78
4.4.2 使用不同的前缀和分隔符 ⏩
接下来,我们看看如何使用不同的前缀和分隔符。
# 创建一个示例 DataFrame,使用不同的前缀和分隔符
data_diff_prefix = pd.DataFrame({
'ID': [1, 2, 3],
'Year': [2020, 2020, 2020],
'Sales-A1': [85, 90, 78],
'Sales-A2': [88, 92, 80],
'Profit-B1': [84, 87, 77],
'Profit-B2': [85, 90, 78]
})
print("DataFrame with different prefix and separator:")
print(data_diff_prefix)
# 使用 pandas.wide_to_long 进行数据重塑,指定不同的前缀和分隔符
long_data_diff_prefix = pd.wide_to_long(data_diff_prefix, stubnames=['Sales-A', 'Profit-B'], i='ID', j='Variable', sep='-', suffix='\\d+')
print("\nReshaped DataFrame with different separator:")
print(long_data_diff_prefix.reset_index())
输出结果如下:
DataFrame with different prefix and separator:
ID Year Sales-A1 Sales-A2 Profit-B1 Profit-B2
0 1 2020 85 88 84 85
1 2 2020 90 92 87 90
2 3 2020 78 80 77 78
Reshaped DataFrame with different separator:
ID Year Variable Sales-A Profit-B
0 1 2020 1 85 84
1 1 2020 2 88 85
2 2 2020 1 90 87
3 2 2020 2 92 90
4 3 2020 1 78 77
5 3 2020 2 80 78
4.5 进阶使用 🚀
4.5.1 处理含有更多层级的数据 💨
在某些情况下,可能需要处理包含更多层级的数据。
# 创建一个包含更多层级的示例 DataFrame
data_more_levels = pd.DataFrame({
'ID': [1, 2],
'Year': [2020, 2020],
'Test_A1_X': [85, 90],
'Test_A1_Y': [88, 92],
'Test_A2_X': [84, 87],
'Test_A2_Y': [85, 90]
})
print("DataFrame with more levels:")
print(data_more_levels)
# 使用 pandas.wide_to_long 处理包含更多层级的数据
long_data_more_levels = pd.wide_to_long(data_more_levels, stubnames=['Test_A1', 'Test_A2'], i='ID', j='Variable', sep='_', suffix='[A-Z]')
print("\nReshaped DataFrame with more levels:")
print(long_data_more_levels.reset_index())
输出结果如下:
DataFrame with more levels:
ID Year Test_A1_X Test_A1_Y Test_A2_X Test_A2_Y
0 1 2020 85 88 84 85
1 2 2020 90 92 87 90
Reshaped DataFrame with more levels:
ID Year Variable Test_A1 Test_A2
0 1 2020 X 85 84
1 1 2020 Y 88 85
2 2 2020 X 90 87
3 2 2020 Y 92 90
4.5.2 处理含有缺失值的数据 📜
pandas.wide_to_long
也可以处理含有缺失值的数据。
# 创建一个包含缺失值的示例 DataFrame
data_with_nan = pd.DataFrame({
'ID': [1, 2, 3],
'Test_A1': [85, None, 78],
'Test_A2': [88, 92, None],
'Test_B1': [84, 87, None],
'Test_B2': [85, 90, 78]
})
print("DataFrame with NaN values:")
print(data_with_nan)
# 使用 pandas.wide_to_long 处理含有缺失值的数据
long_data_with_nan = pd.wide_to_long(data_with_nan, stubnames=['Test_A', 'Test_B'], i='ID', j='Variable', sep='_', suffix='\\d+')
print("\nReshaped DataFrame handling NaN values:")
print(long_data_with_nan.reset_index())
输出结果如下:
DataFrame with NaN values:
ID Test_A1 Test_A2 Test_B1 Test_B2
0 1 85.0 88.0 84.0 85.0
1 2 NaN 92.0 87.0 90.0
2 3 78.0 NaN NaN 78.0
Reshaped DataFrame handling NaN values:
ID Variable Test_A Test_B
0 1 1 85.0 84.0
1 1 2 88.0 85.0
2 2 1 NaN 87.0
3 2 2 92.0 90.0
4 3 1 78.0 NaN
5 3 2 NaN 78.0
5. 注意事项 ⚠️
- 数据格式:
df
参数必须是一个 DataFrame,并且列名应符合重塑操作的要求。 - 后缀正则匹配:确保后缀正则表达式能够正确匹配列名中的后缀部分。
- 缺失值处理:
pandas.wide_to_long
同样适用于含有缺失值的数据。
6. 参考资料 📚
7. 结论 🏁
Pandas 的 pandas.wide_to_long
函数提供了一种高效且灵活的方式,将宽格式数据重塑为长格式数据。通过本文详细的讲解和示例,相信你已经掌握了 pandas.wide_to_long
的基础使用方法和进阶技巧,有助于更好地进行数据重塑和分析处理。