当前位置: 首页 > news >正文

Python数据处理利器,pivot与melt让表格变得灵活

大家好,在数据分析和处理过程中,数据的重塑是一个非常常见且重要的操作。数据重塑能够从不同的角度观察数据,以更符合分析需求的方式来呈现数据。在Python的Pandas库中,pivotmelt是两种强大的数据重塑工具,能够轻松地在宽表(Wide Format)和长表(Long Format)之间转换数据。本文将介绍Pandas中的pivotmelt方法,帮助掌握这些技巧,通过丰富的示例代码,在实际项目中灵活应用。 

1.数据重塑概述

数据重塑指的是改变数据集的结构或形状,使得数据能够以另一种形式呈现。常见的重塑操作包括将数据从宽表转为长表,或者从长表转为宽表。

  • 宽表(Wide Format):数据表中有多个列,每一列代表不同的变量或时间点。

  • 长表(Long Format):数据表中的每一行代表一个观测值,通常包括一个分类变量(如时间、类别)和一个度量变量。

pivotmelt是Pandas中用于执行这些重塑操作的核心方法。

2.Pandas中的pivot函数

pivot函数用于将长表转为宽表。这种操作通常涉及到将某一列的值作为新表的列名,同时将另一列的值作为新表的行标签。

2.1 基本用法

pivot函数的基本语法如下:

df.pivot(index='行标签列', columns='列标签列', values='值列')
  • index:用于生成行标签的列。

  • columns:用于生成列标签的列。

  • values:在新表中填充数据的列。

import pandas as pd# 创建一个示例DataFrame
data = {'Date': ['2023-01-01', '2023-01-01', '2023-01-02', '2023-01-02'],'City': ['New York', 'Los Angeles', 'New York', 'Los Angeles'],'Temperature': [30, 35, 28, 32]
}df = pd.DataFrame(data)# 使用pivot将长表转换为宽表
pivot_df = df.pivot(index='Date', columns='City', values='Temperature')
print(pivot_df)

输出结果:

City       Los Angeles  New York
Date                              
2023-01-01           35        30
2023-01-02           32        28

在这个示例中,将Date列作为行标签,将City列作为列标签,而Temperature列则填充了新表中的数据。结果是一个宽表,其中每个城市在不同日期的温度值成为独立的列。

2.2 处理重复值

在某些情况下,pivot操作会遇到重复值,这时需要指定如何处理这些重复数据。通常可以使用pivot_table函数,它提供了更灵活的功能来处理重复数据。

# 创建一个包含重复值的示例DataFrame
data = {'Date': ['2023-01-01', '2023-01-01', '2023-01-02', '2023-01-02', '2023-01-01'],'City': ['New York', 'New York', 'New York', 'Los Angeles', 'Los Angeles'],'Temperature': [30, 28, 28, 32, 33]
}df = pd.DataFrame(data)# 使用pivot_table处理重复值,取平均值
pivot_table_df = df.pivot_table(index='Date', columns='City', values='Temperature', aggfunc='mean')
print(pivot_table_df)

输出结果:

City       Los Angeles  New York
Date                              
2023-01-01           33        29
2023-01-02           32        28

在这个示例中,pivot_table通过aggfunc参数指定了聚合函数mean来处理重复值,从而在转换时取重复值的平均值。

3.Pandas中的melt函数

melt函数用于将宽表转换为长表,这种操作通常将多个列的值合并到一个单独的列中,同时生成新的变量列。

3.1 基本用法

melt函数的基本语法如下:

df.melt(id_vars=['保留列'], value_vars=['待合并列'], var_name='新变量列名', value_name='新值列名')
  • id_vars:在转换过程中保留的列。

  • value_vars:要合并的列,未指定时默认使用所有其他列。

  • var_name:新变量列的名称。

  • value_name:新值列的名称。

# 使用pivot生成宽表
pivot_df = df.pivot(index='Date', columns='City', values='Temperature')# 使用melt将宽表转换回长表
melted_df = pivot_df.reset_index().melt(id_vars=['Date'], var_name='City', value_name='Temperature')
print(melted_df)

输出结果:

         Date        City  Temperature
0  2023-01-01  Los Angeles         35.0
1  2023-01-02  Los Angeles         32.0
2  2023-01-01     New York         30.0
3  2023-01-02     New York         28.0

在这个示例中,使用melt将前面生成的宽表转换回长表,其中Date列被保留,City列和Temperature列分别生成新的变量和值列。

3.2 多列melt

melt函数还可以处理多列的合并,这在我们需要同时合并多个变量时非常有用。

# 创建一个包含多个值列的示例DataFrame
data = {'Date': ['2023-01-01', '2023-01-02'],'New York_Temperature': [30, 28],'Los Angeles_Temperature': [35, 32],'New York_Humidity': [70, 65],'Los Angeles_Humidity': [60, 58]
}df = pd.DataFrame(data)# 使用melt将多个列合并
melted_df = df.melt(id_vars=['Date'], var_name='Variable', value_name='Value')
print(melted_df)

输出结果:

         Date               Variable  Value
0  2023-01-01  New York_Temperature     30
1  2023-01-02  New York_Temperature     28
2  2023-01-01  Los Angeles_Temperature     35
3  2023-01-02  Los Angeles_Temperature     32
4  2023-01-01  New York_Humidity       70
5  2023-01-02  New York_Humidity       65
6  2023-01-01  Los Angeles_Humidity     60
7  2023-01-02  Los Angeles_Humidity     58

在这个示例中,将温度和湿度数据分别合并到一个长表中,这样的数据格式便于进一步分析或绘图。

3.3 pivot和melt结合使用

在实际数据处理中,经常需要将pivotmelt结合使用,先通过pivot将数据转为宽表,然后通过melt将数据还原为长表或进一步处理。

# 创建初始长表数据
data = {'Date': ['2023-01-01', '2023-01-01', '2023-01-02', '2023-01-02'],'City': ['New York', 'Los Angeles', 'New York', 'Los Angeles'],'Temperature': [30, 35, 28, 32],'Humidity': [70, 60, 65, 58]
}df = pd.DataFrame(data)# 1. 使用pivot生成宽表
pivot_df = df.pivot(index='Date', columns='City', values=['Temperature', 'Humidity'])
print("宽表形式:\n", pivot_df)# 2. 使用melt将宽表转换为长表
melted_df = pivot_df.reset_index().melt(id_vars=['Date'], var_name=['Measurement', 'City'], value_name='Value')
print("\n还原后的长表形式:\n", melted_df)

输出结果:

宽表形式:Temperature  Humidity         
City   Los Angeles New York Los Angeles New York
Date                                          
2023-01-01           35       30           60       70
2023-01-02           32       28           58       65还原后的长表形式:Date Measurement        City  Value
0  2023-01-01  Temperature  Los Angeles     35
1  2023-01-02  Temperature  Los Angeles     32
2  2023-01-01  Temperature     New York     30
3  2023-01-02  Temperature     New York     28
4  2023-01-01     Humidity  Los Angeles     60
5  2023-01-02     Humidity  Los Angeles     58
6  2023-01-01     Humidity     New York     70
7  2023-01-02     Humidity     New York     65

在这个例子中,先使用pivot将数据从长表转换为宽表形式,然后再使用melt将宽表还原为长表。这种灵活的转换方式在复杂数据处理中非常有用。

综上所述,本文介绍了在Python Pandas库中使用pivotmelt进行数据重塑的技巧。通过具体示例展示如何利用pivot将数据从长表转换为宽表,以及使用melt将宽表还原为长表,这些操作在数据分析、数据清洗和可视化准备中非常关键,还介绍了pivot_table的高级用法,特别是在处理重复值时的应用。此外,本文展示了如何在实际项目中结合使用pivotmelt,在数据处理中更加灵活和高效地操作数据结构。掌握这些技巧,将极大提升数据处理能力,能够轻松应对各种复杂的分析需求。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Java架构师未来篇大模型
  • c++ 链表详细介绍
  • C++vector类 (带你一篇文章搞定C++中的vector类)
  • 区块链审计 如何测试solidity的bool值占用几个字节
  • 基于SpringBoot+Vue+MySQL的画师约稿平台系统
  • 【Unity-Lua】音乐播放器循环滚动播放音乐名
  • 【微服务】Ribbon(负载均衡,服务调用)+ OpenFeign(服务发现,远程调用)【详解】
  • 【Kubernetes】常见面试题汇总(二)
  • JVM: JDK内置命令 - JPS
  • 微信小程序-formData使用
  • 【MySQL】查询表中重复数据、模糊查询列信息、快速copy表数据(1)
  • 分布式锁-Redisson 可重入锁
  • 注意力机制的细节
  • redis群集的三种模式
  • Jenkins 通过 Version Number Plugin 自动生成和管理构建的版本号
  • Java|序列化异常StreamCorruptedException的解决方法
  • js正则,这点儿就够用了
  • linux学习笔记
  • Lucene解析 - 基本概念
  • php ci框架整合银盛支付
  • python3 使用 asyncio 代替线程
  • Yii源码解读-服务定位器(Service Locator)
  • 从输入URL到页面加载发生了什么
  • 第2章 网络文档
  • 看完九篇字体系列的文章,你还觉得我是在说字体?
  • 理解 C# 泛型接口中的协变与逆变(抗变)
  • 配置 PM2 实现代码自动发布
  • 如何借助 NoSQL 提高 JPA 应用性能
  • 深入体验bash on windows,在windows上搭建原生的linux开发环境,酷!
  • 小程序button引导用户授权
  • 以太坊客户端Geth命令参数详解
  • 树莓派用上kodexplorer也能玩成私有网盘
  • ​Benvista PhotoZoom Pro 9.0.4新功能介绍
  • ​secrets --- 生成管理密码的安全随机数​
  • ​十个常见的 Python 脚本 (详细介绍 + 代码举例)
  • (1)(1.9) MSP (version 4.2)
  • (1)SpringCloud 整合Python
  • (11)MATLAB PCA+SVM 人脸识别
  • (C语言)共用体union的用法举例
  • (day 12)JavaScript学习笔记(数组3)
  • (delphi11最新学习资料) Object Pascal 学习笔记---第2章第五节(日期和时间)
  • (Redis使用系列) Springboot 实现Redis 同数据源动态切换db 八
  • (zt)基于Facebook和Flash平台的应用架构解析
  • (附源码)计算机毕业设计SSM疫情社区管理系统
  • (黑客游戏)HackTheGame1.21 过关攻略
  • (论文阅读11/100)Fast R-CNN
  • (论文阅读30/100)Convolutional Pose Machines
  • (使用vite搭建vue3项目(vite + vue3 + vue router + pinia + element plus))
  • (转载)微软数据挖掘算法:Microsoft 时序算法(5)
  • **python多态
  • .htaccess 强制https 单独排除某个目录
  • .net core + vue 搭建前后端分离的框架
  • .NET LINQ 通常分 Syntax Query 和Syntax Method
  • .net mvc actionresult 返回字符串_.NET架构师知识普及
  • .NET 除了用 Task 之外,如何自己写一个可以 await 的对象?