新闻中心
Pandas数据重塑:将行级页面数据转换为列级格式

本文详细介绍了如何使用pandas的`pivot`函数将行级别的数据(例如按页码分布的报告信息)高效地转换为列级别格式。通过一个具体的示例,文章演示了如何利用`index`、`columns`和`values`参数进行数据透视,并结合`add_prefix`、`reset_index`和`rename_axis`等方法,实现将特定行数据转换为带有描述性新列名的列,从而优化数据结构以满足分析需求。
在数据分析和处理中,我们经常会遇到需要将数据的行转换为列的场景,这种操作通常被称为数据透视(pivot)。当原始数据以“长格式”存储,即多个相关属性值分散在不同的行中时,为了便于比较和分析,我们可能需要将其转换为“宽格式”,使每个属性值成为一个独立的列。本文将以一个具体的示例,讲解如何使用Pandas库中的pivot函数实现这一转换,特别是针对具有层级结构(如年度报告中的页面信息)的数据。
场景描述与初始数据结构
假设我们有一份关于公司年度报告的数据,其中包含了公司(FIRM)、年份(YEAR)、报告页码(Report Page)以及对应页码的某个数值(Value1)。初始数据以行级别存储,即同一份报告的不同页面信息分别占据不同的行。
以下是示例数据及其DataFrame表示:
import pandas as pd
data = {
'FIRM': ['A', 'A', 'B', 'B'],
'YEAR': [2012, 2012,
2013, 2013],
'Report Page': [1, 2, 1, 2],
'Value1': [10, 15, 20, 25]
}
df = pd.DataFrame(data)
print("原始DataFrame:")
print(df)输出的DataFrame结构如下:
原始DataFrame: FIRM YEAR Report Page Value1 0 A 2012 1 10 1 A 2012 2 15 2 B 2013 1 20 3 B 2013 2 25
我们的目标是将每个报告(由FIRM和YEAR唯一标识)的页面信息(Value1)从行转换为列。具体来说,我们希望将Report Page列中的页码转换为新的列名的一部分,例如Value1_Page1、Value1_Page2,并将对应的Value1值填充到这些新列中。
期望的输出格式如下:
FIRM YEAR Value1_Page1 Value1_Page2 0 A 2012 10 15 1 B 2013 20 25
使用 pandas.pivot 进行数据重塑
Pandas的pivot函数是实现这种数据重塑的核心工具。它允许我们指定哪些列作为新的索引(行)、哪些列作为新的列名,以及哪些列的值将填充到新的DataFrame中。
pivot函数的基本语法是:df.pivot(index=None, columns=None, values=None)。
- index: 用于构建新DataFrame索引的列或列的列表。
- columns: 用于构建新DataFrame列名的列。
- values: 用于填充新DataFrame值的列。
根据我们的目标,我们需要:
SSP网店系统单用户免费普及版
前后台订单管理页添加商品缩图显示 后台系统设置可直接对商品缩图大小进行设置 去掉商品图片水印功能 上传一张图片,可同时生成列表页缩图及商品详细页缩图,以不同的大小满足页面不同的需要 商品收藏添加批量删除功能 修改商品详细页会员等级显示BUG 优化缩图生成功能(注:因此次优化已更换上传内核,所以有可能会影响已上传商品图片数据) 加入简繁转换 前台订单管理添加单订单在线支付功能 修正VS081样式前台
0
查看详情
- 以FIRM和YEAR作为新的索引,因为它们共同定义了一个唯一的报告。
- 以Report Page作为新的列名,因为我们希望每个页码成为一个独立的列。
- 以Value1作为填充新列的值。
因此,我们可以这样使用pivot函数:
# 步骤1: 使用pivot函数进行透视
pivoted_df = df.pivot(index=['FIRM', 'YEAR'], columns='Report Page', values='Value1')
print("\n透视后的DataFrame (初步):")
print(pivoted_df)执行上述代码后,pivoted_df的输出将是:
透视后的DataFrame (初步): Report Page 1 2 FIRM YEAR A 2012 10 15 B 2013 20 25
可以看到,FIRM和YEAR已经成为新的复合索引,Report Page的值(1和2)成为了新的列名,并且Value1的值被正确地填充。
后续处理:重命名列和重置索引
虽然pivot函数完成了大部分工作,但为了达到最终期望的输出格式,我们还需要进行一些后处理:
- 添加列名前缀: 原始的列名是页码(1, 2),我们希望它们是Value1_Page1、Value1_Page2。
- 重置索引: FIRM和YEAR目前是索引,我们希望它们作为常规列。
- 清理列索引名称: pivot操作可能会在列索引上留下一个名称(例如Report Page),这通常是不需要的。
我们可以通过链式操作来完成这些步骤:
final_df = (
df.pivot(index=['FIRM', 'YEAR'], columns='Report Page', values='Value1')
.add_prefix('Value1_Page') # 为新生成的列名添加前缀
.reset_index() # 将索引(FIRM, YEAR)转换为常规列
.rename_axis(None, axis=1) # 清除列索引的名称
)
print("\n最终转换后的DataFrame:")
print(final_df)最终输出的DataFrame将完全符合我们的预期:
最终转换后的DataFrame: FIRM YEAR Value1_Page1 Value1_Page2 0 A 2012 10 15 1 B 2013 20 25
注意事项与扩展
-
pivot与pivot_table的区别:
- pivot要求index和columns的组合必须是唯一的。如果存在重复组合,pivot会抛出错误。
- pivot_table功能更强大,可以处理重复组合,并通过aggfunc参数指定聚合函数(如sum、mean等)来处理重复值。如果你的数据可能存在相同FIRM、YEAR和Report Page的行,并且需要对Value1进行聚合,那么pivot_table是更合适的选择。
处理页面数量不一致的情况: 本解决方案能够自然地处理不同报告具有不同页面数量的情况。如果某个报告缺少某一页的数据,相应的新列中将填充NaN(Not a Number)。例如,如果报告A只有Page1,而没有Page2,那么Value1_Page2列对于报告A的行将是NaN。
多值列的透视: 如果需要透视多个值列(例如除了Value1还有Value2),可以将values参数设置为一个列表,例如values=['Value1', 'Value2']。在这种情况下,add_prefix可能需要更精细的控制,或者在透视后手动重命名列。
总结
通过本文的详细讲解,我们学习了如何利用Pandas的pivot函数将行级别的页面数据转换为列级别格式。结合add_prefix、reset_index和rename_axis等辅助函数,我们可以灵活地重塑DataFrame,使其更符合数据分析和报告的需求。掌握pivot及其相关操作是Pandas数据处理中一项非常实用的技能,能够显著提高数据清洗和准备的效率。
以上就是Pandas数据重塑:将行级页面数据转换为列级格式的详细内容,更多请关注其它相关文章!
# 上传
# 月嫂营销推广方案策划
# seo的艺术 epub
# 坂田网络营销网站优化
# 清远网站优化推广策划
# 遵义网络seo推广霸屏
# 上饶网络推广和网站推广
# 青岛edm推广营销招聘
# 蛋糕店营销推广的目标
# 南海更合网站建设
# 荣昌做抖音seo优化
# 成为一个
# 工具
# 多个
# 我们可以
# 缩图
# 如何使用
# 网店
# 数据结构
# 普及版
# 转换为
# 聚合函数
# 区别
# 数据清洗
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
网站内容防复制粘贴的实现策略与局限性
Golang如何实现Web接口签名验证_Golang Web接口签名校验开发方法
Golang如何使用bytes.Split分割字节切片_Golang bytes切片分割方法
Win10如何清理注册表垃圾 Win10手动清理无效注册表【技巧】
漫蛙manwa2最新登录网址_漫蛙manwa2手机网页版入口
《主播少女的秘密账号迷宫》首支宣传片
最新韩小圈网页版登录入口_官网在线观看官方链接
一加 14R 快充无反应_一加 14R 充电优化
包子漫画官方网站阅读入口-包子漫画在线漫画官网直达链接
MAC的“快捷指令”怎么同步到iPhone_MAC利用iCloud同步所有设备的自动化指令
KFC套餐升级怎么获取优惠代码_KFC套餐升级活动与优惠代码获取方法
Golang指针如何与map组合使用_Golang map指针组合实践
c++ 获取系统当前时间 c++时间戳获取方法
PHP中SSG-WSG API的AES加密实践:正确使用初始化向量
J*a递归快速排序中静态变量导致数据累积问题的解决方案
QQ邮箱在线使用入口 QQ邮箱个人账号网页版登录
深入理解Go语言中的指针类型:以*string为例
Win11怎么合并任务栏图标 Win11开启任务栏合并减少图标占空间【方法】
Python多版本共存与虚拟环境管理深度指南
mcjs网页版在线存档 mcjs云存档登录入口
优化大型XML文件解析:基于Python流式处理的内存高效方案
AO3镜像入口大全 AO3网页版内容访问全集
快手赚钱渠道_快手收益来源
PDF文件体积过大处理_PDF压缩技巧详解
品牌机怎么重装系统 联想/戴尔/惠普笔记本恢复出厂系统教程
Vue.js 图片显示异常排查:理解应用挂载范围与DOM ID唯一性
Python字典中优雅地迭代剩余元素的方法
妖精动漫免费平台 妖精动漫官网资源观看网址
如何在低配置电脑上搭建轻量级J*a环境_占用更小的环境选择技巧
怎么在html里运行vbs脚本_html中运行vbs脚本方法【教程】
c++ dfs和bfs代码 c++深度广度优先搜索算法
解决Python logging 中 datefmt 导致时间戳固定不变的问题
如何优雅地扩展SprykerGlue后端API授权逻辑,使用spryker/glue-backend-api-application-authorization-connector-extension
狙击外星人小游戏开始_狙击外星人小游戏立即开始
Fabric Mod开发:在1.19.3+版本中正确添加自定义物品并管理物品组
PySpark中高效提取字符串右侧可变长度数字:使用regexp_extract
mysql如何设置表访问权限_mysql表访问权限配置
斑马英语APP如何开启夜间护眼阅读_斑马英语APP夜间模式与低蓝光设置教程
厨房不锈钢水槽发黑生锈怎么处理_水槽用可乐+锡纸2分钟抛亮如新
如何在Promise链中优雅地中断后续then执行
在J*a中如何在J*a中使用异常机制记录错误日志_异常日志实践经验
魅族17怎样用浏览器译外语网页_iPhone魅族17浏览器译外语网页【即时翻译】
必由学官网入口 必由学教师登录入口
在Runstone环境中高效处理TasteDive API的JSON数据
黑鲨3Pro怎样在相册开漫画风滤镜_iPhone黑鲨3Pro相册开漫画风滤镜【趣味滤镜】
深入理解J*a合成构造器:何时以及为何阻止其生成
电脑屏幕颜色不舒服怎么办_Windows夜间模式与色彩校准教程【护眼技巧】
CSS子选择器:如何区分并样式化嵌套列表的子层级
Node.js CSV 数据处理:基于字段空值条件过滤整条记录的策略
Composer如何处理Git子模块(submodule)依赖_Composer与Git Submodule的对比与选择


2025-11-18
浏览次数:次
返回列表
2013, 2013],
'Report Page': [1, 2, 1, 2],
'Value1': [10, 15, 20, 25]
}
df = pd.DataFrame(data)
print("原始DataFrame:")
print(df)