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,在数据处理中更加灵活和高效地操作数据结构。掌握这些技巧,将极大提升数据处理能力,能够轻松应对各种复杂的分析需求。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/53873.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电离层闪烁

电离层闪烁,有的时候有有的时候无,但是经常出现,导致导航信号的振幅和相位发生变化,影响导航精度。使得载噪比降低。定位精度降低。 电离层闪烁的大小从几米到几百米,所以在使用RTK时,就算是相隔很近的基站…

npm 设置国内镜像源

1.1 镜像源概述 镜像源是软件包管理工具用来下载和安装软件包的服务器地址。由于网络原因,直接使用官方源可能会导致速度慢或连接失败的问题。国内镜像源可以提供更快的访问速度和更稳定的连接。 1.2 镜像源的选择 国内有许多可用的npm镜像源,包括但不限…

OKHttp实现原理分享

前言介绍 大约在2年半之前,就想写一篇关于OKHttp原理的文章,一来深入了解一下其原理,二来希望能在了解原理之后进行更好的使用。但是因为种种原因,一直无限往后推迟,最近因为我们情景智能半个月一次的分享轮到我了&…

【鸿蒙】HarmonyOS NEXT星河入门到实战1-开发环境准备

目录 一、达成目标 二、鸿蒙开发环境准备 2.1 开发者工作下载 2.2 解压安装 2.3 运行配置安装node.js和SDK 2.4 开始创建第一个项目 2.5 预览 2.5.1 预览遇到的问题(报错) 2.5.2 修改内容查看预览 三、备用下载地址(如果下载是4.X版…

Prism库:详解其核心组件和使用方法

Prism库简介 Prism库是一个开源项目,由 Microsoft 社区开发和维护。它是一组用于创建 WPF、UWP 和 Xamarin 应用程序的工具和库,提供了一种基于模块化和依赖注入的架构模式,同时它提供了一系列的工具,帮助开发人员构建可扩展、可…

MATLAB、FPGA、STM32中调用FFT计算频率、幅值及相位差

系列文章目录 文章目录 系列文章目录前言MATLABSTM32调用DSPSTM32中实现FFT关于初相位 FPGA 前言 最近在学习如何在STM32中调用FFT MATLAB 首先对FFT进行一下说明,我们输入N个点的数据到FFT中,FFT会返回N个点的数据,这些数据都是复数&#…

ASP.NET Core 入门教学二十八 linux打包部署

在Linux上打包和部署ASP.NET Core应用程序涉及几个步骤。以下是一个详细的指南,帮助你在Linux系统上完成这一过程。 1. 准备工作 确保你的Linux系统已经安装了以下软件: .NET SDK(用于构建应用程序).NET Runtime(用…

ctfshow-PHP反序列化

web254 源码 <?php/* # -*- coding: utf-8 -*- # Author: h1xa # Date: 2020-12-02 17:44:47 # Last Modified by: h1xa # Last Modified time: 2020-12-02 19:29:02 # email: h1xactfer.com # link: https://ctfer.com //mytime 2023-12-4 0:22 */ error_reporting(0)…

Charles mac电脑配置

安装 Charles&#xff1a; 如果你还没有安装 Charles&#xff0c;可以从官方网站下载安装包并按照提示完成安装。 启动 Charles&#xff1a; 安装完成后&#xff0c;启动 Charles 应用程序。 设置 Charles 代理&#xff1a; Charles 默认的代理端口是 8888。你可以通过以下步…

一条sql是如何执行的详解

一条sql是如何执行的详解 1. SQL 解析&#xff08;Parsing&#xff09; 2. 查询重写&#xff08;Query Rewrite&#xff09; 3. 查询规划&#xff08;Query Planning&#xff09; 4. 查询执行&#xff08;Query Execution&#xff09; 5. 结果返回 示例&#xff1a;查询执…

MATLAB | R2024b更新了哪些好玩的东西?

Hey, 又到了一年两度的MATLAB更新时刻&#xff0c;MATLAB R2024b正式版发布啦&#xff01;&#xff0c;直接来看看有哪些我认为比较有意思的更新吧! 1 小提琴图 天塌了&#xff0c;我这两天才写了个半小提琴图咋画&#xff0c;MATLAB 官方就出了小提琴图绘制方法。 小提琴图…

鸿蒙读书笔记1:《鸿蒙操作系统设计原理与架构》

笔记来自新书&#xff1a;《鸿蒙操作系统设计原理与架构》 HarmonyOS采用分层架构&#xff0c;从下到 上依次分为内核层、系统服务层、框架层和应用层。 1. 内核层 内核层主要提供硬件资源抽象和常用软件资源&#xff0c;包括进程/线程管 理、内存管理、文件系统和IPC&#xff…

Unity教程(十五)敌人战斗状态的实现

Unity开发2D类银河恶魔城游戏学习笔记 Unity教程&#xff08;零&#xff09;Unity和VS的使用相关内容 Unity教程&#xff08;一&#xff09;开始学习状态机 Unity教程&#xff08;二&#xff09;角色移动的实现 Unity教程&#xff08;三&#xff09;角色跳跃的实现 Unity教程&…

C语言开发一个简单的产品入库操作系统

编写一个简单的产品入库操作系统是一个涉及文件操作、用户输入和数据处理的项目。以下是一个基本的C语言示例&#xff0c;它展示了如何创建一个简单的产品入库系统。这个系统将允许用户添加产品信息&#xff0c;并将其存储在文件中。 功能描述 添加产品信息&#xff08;产品I…

react js 路由 Router

完整的项目,我已经上传了 资料链接 起因, 目的: 路由, 这部分很难。 原因是, 多个组件,进行交互,复杂度比较高。 我看的视频教程 1. 初步使用 安装: npm install react-router-dom 修改 index.js/ 或是 main.js 把 App, 用 BrowserRouter 包裹起来 2. Navigate 点击…

无关痛痒的return 0

一般我们在程序的最后都要加上一行代码&#xff1a; return 0; 它通常用于main函数的末尾来表示程序正常结束。如果返回0以外的任何数&#xff0c;就表示程序没有正常结束。假使你在竞赛时一时兴起想要标新立异来个return 9527&#xff0c;那么你就悲剧了。 其实这玩艺完全可…

redis基本数据类型和常见命令

引言 Redis是典型的key-value&#xff08;键值型&#xff09;数据库&#xff0c;key一般是字符串&#xff0c;而value包含很多不同的数据类型&#xff1a; Redis为了方便我们学习&#xff0c;将操作不同数据类型的命令也做了分组&#xff0c;在官网&#xff08; Commands | Do…

TS 常用类型

我们经常说TypeScript是JavaScript的一个超级 TypeScript 常用类型 TypeScript 是 JS 的超集&#xff0c;TS 提供了 JS 的所有功能&#xff0c;并且额外的增加了&#xff1a;类型系统 所有的 JS 代码都是 TS 代码 JS 有类型&#xff08;比如&#xff0c;number/string 等&…

《JavaEE进阶》----14.<SpringMVC配置文件实践之【验证码项目】>

本篇博客介绍的是Google的开源项目Kaptcha来实现的验证码。 这种是最简单的验证码。 也是很常见的一种验证码。可以去看项目结果展示。就可以明白这个项目了。 前言&#xff1a; 随着安全性的要求越来越高、很多项目都使用了验证码。如今验证码的形式也是有许许多多、更复杂的图…

LeetCode: 673.最长子序列的数量 动态规划 时间复杂度O(n*n)

673.最长子序列的数量 LeetCode原题连接 673. 最长子序列的数量 题目描述 给定一个未排序的整数数组&#xff0c;找到最长递增子序列的个数。 示例 1: 输入: [1,3,5,4,7] 输出: 2 解释: 有两个最长递增子序列&#xff0c;分别是 [1, 3, 4, 7] 和 [1, 3, 5, 7]。示例 2: 输…