【Pandas】pandas.wide_to_long详解与实战应用:宽格式数据重塑的利器,用于将宽格式数据重塑为长格式数据。长格式数据在处理多变量数据、时间序列分析和绘图时更为方便和实用

在数据分析和处理过程中,常常需要将宽格式的数据转换为长格式的数据,以便更好地适应分析需求。pandas.wide_to_long 是 Pandas 提供的一个函数,用于将宽格式数据重塑为长格式数据。长格式数据在处理多变量数据、时间序列分析和绘图时更为方便和实用。本文将详细介绍 pandas.wide_to_long 的用途和用法,包括其参数详解、示例代码以及进阶使用技巧。


🧑 博主简介:现任阿里巴巴嵌入式技术专家,15年工作经验,深耕嵌入式+人工智能领域,精通嵌入式领域开发、技术管理、简历招聘面试。CSDN优质创作者,提供产品测评、学习辅导、简历面试辅导、毕设辅导、项目开发、C/C++/Java/Python/Linux/AI等方面的服务,如有需要请站内私信或者联系任意文章底部的的VX名片(ID:gylzbk

💬 博主粉丝群介绍:① 群内初中生、高中生、本科生、研究生、博士生遍布,可互相学习,交流困惑。② 热榜top10的常客也在群里,也有数不清的万粉大佬,可以交流写作技巧,上榜经验,涨粉秘籍。③ 群内也有职场精英,大厂大佬,可交流技术、面试、找工作的经验。④ 进群免费赠送写作秘籍一份,助你由写作小白晋升为创作大佬。⑤ 进群赠送CSDN评论防封脚本,送真活跃粉丝,助你提升文章热度。有兴趣的加文末联系方式,备注自己的CSDN昵称,拉你进群,互相学习共同进步。

在这里插入图片描述

在这里插入图片描述

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 有以下几个优点:

  1. 数据重塑:能够快速将宽格式数据重塑为长格式,便于时间序列分析和绘图。
  2. 简洁性:语法简洁,能够方便地完成数据重塑操作。
  3. 灵活性:支持多列同时重塑,满足复杂的数据重塑需求。

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 ‘’。说明:stubnamesj 之间的分隔符。
  • 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. 注意事项 ⚠️

  1. 数据格式df 参数必须是一个 DataFrame,并且列名应符合重塑操作的要求。
  2. 后缀正则匹配:确保后缀正则表达式能够正确匹配列名中的后缀部分。
  3. 缺失值处理pandas.wide_to_long 同样适用于含有缺失值的数据。

6. 参考资料 📚

7. 结论 🏁

Pandas 的 pandas.wide_to_long 函数提供了一种高效且灵活的方式,将宽格式数据重塑为长格式数据。通过本文详细的讲解和示例,相信你已经掌握了 pandas.wide_to_long 的基础使用方法和进阶技巧,有助于更好地进行数据重塑和分析处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

I'mAlex

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值