【Pandas入门教程】如何重塑表格布局

news2024/12/29 9:41:22

如何重塑表格布局

来源:Pandas官网:https://pandas.pydata.org/docs/getting_started/intro_tutorials/index.html
笔记托管:https://gitee.com/DingJiaxiong/machine-learning-study

在这里插入图片描述

文章目录

    • 如何重塑表格布局
        • 导包
        • 数据准备
        • 【1】对表行进行排序
        • 【2】长到宽表格式
        • 【3】数据透视表
        • 【4】宽幅到长幅
        • 【小结】

导包

import pandas as pd

数据准备

使用存储为 CSV 的泰坦尼克号数据集。数据由以下数据列组成:

  • 【PassengerId】乘客 ID:每位乘客的 ID。
  • 【Survived】幸存:表明乘客是否幸存。0 表示是,1 表示否。
  • 【Pclass】P类:3个机票类别之一:1类,2类和3类.
  • 【Name】姓名:乘客姓名。
  • 【Sex】性别:乘客的性别。
  • 【Age】年龄:乘客的年龄(以岁为单位)。
  • SibSp:船上的兄弟姐妹或配偶的数量。
  • Parch:船上的父母或孩子人数。
  • 【Ticket】票:乘客的票号。
  • 【Fare】票价:表示票价。
  • 【Cabin】客舱:乘客的客舱号码。
  • 【Embarked】登船:登船港。
titanic = pd.read_csv("titanic.csv")
titanic.head()
PassengerIdSurvivedPclassNameSexAgeSibSpParchTicketFareCabinEmbarked
0103Braund, Mr. Owen Harrismale22.010A/5 211717.2500NaNS
1211Cumings, Mrs. John Bradley (Florence Briggs Th...female38.010PC 1759971.2833C85C
2313Heikkinen, Miss. Lainafemale26.000STON/O2. 31012827.9250NaNS
3411Futrelle, Mrs. Jacques Heath (Lily May Peel)female35.01011380353.1000C123S
4503Allen, Mr. William Henrymale35.0003734508.0500NaNS

【空气质量数据】

使用有关以下内容的空气质量数据
以及小于 2.5 微米的颗粒物,由 OpenAQ 提供并使用 py-openaq 包。air_quality_long.csv数据集提供

分别位于巴黎、安特卫普和伦敦的 FR04014、BETR801 和伦敦威斯敏斯特测量站的值。

空气质量数据集包含以下列:

  • 城市:使用传感器的城市,巴黎、安特卫普或伦敦
  • 国家/地区:使用传感器的国家/地区,法国、比利时或英国
  • 位置:传感器的 ID,FR04014、BETR801 或伦敦威斯敏斯特
  • 参数:传感器测量的参数,其中之一或颗粒物
  • 值:测量值
  • 单位:测量参数的单位,在本例中为“μg/m³”

DataFrame的索引是日期时间,即测量的datetime。

【注意】空气质量数据以所谓的长格式数据表示形式提供,每个观测值在单独的行上,每个变量在数据表中的单独列上。长/窄格式也称为整洁数据格式.

air_quality = pd.read_csv("air_quality_long.csv", index_col="date.utc", parse_dates=True)
air_quality.head()
citycountrylocationparametervalueunit
date.utc
2019-06-18 06:00:00+00:00AntwerpenBEBETR801pm2518.0µg/m³
2019-06-17 08:00:00+00:00AntwerpenBEBETR801pm256.5µg/m³
2019-06-17 07:00:00+00:00AntwerpenBEBETR801pm2518.5µg/m³
2019-06-17 06:00:00+00:00AntwerpenBEBETR801pm2516.0µg/m³
2019-06-17 05:00:00+00:00AntwerpenBEBETR801pm257.5µg/m³

【1】对表行进行排序

我想根据乘客的年龄对泰坦尼克号数据进行排序。

titanic.sort_values(by="Age").head()
PassengerIdSurvivedPclassNameSexAgeSibSpParchTicketFareCabinEmbarked
80380413Thomas, Master. Assad Alexandermale0.420126258.5167NaNC
75575612Hamalainen, Master. Viljomale0.671125064914.5000NaNS
64464513Baclini, Miss. Eugeniefemale0.7521266619.2583NaNC
46947013Baclini, Miss. Helene Barbarafemale0.7521266619.2583NaNC
787912Caldwell, Master. Alden Gatesmale0.830224873829.0000NaNS

我想根据舱位等级和年龄降序对泰坦尼克号数据进行排序。

titanic.sort_values(by=["Pclass", "Age"], ascending=False).head()
PassengerIdSurvivedPclassNameSexAgeSibSpParchTicketFareCabinEmbarked
85185203Svensson, Mr. Johanmale74.0003470607.7750NaNS
11611703Connors, Mr. Patrickmale70.5003703697.7500NaNQ
28028103Duane, Mr. Frankmale65.0003364397.7500NaNQ
48348413Turkula, Mrs. (Hedwig)female63.00041349.5875NaNS
32632703Nysveen, Mr. Johan Hansenmale61.0003453646.2375NaNS

使用 DataFrame.sort_values()表中的行根据定义的列进行排序。索引将遵循行顺序。

【2】长到宽表格式

使用空气质量数据集的一小部分。我们专注于 N O 2 NO_2 NO2 数据,并且仅使用每个位置的前两个测量值(即每个组的头部)。数据子集将称为no2_subset.

no2 = air_quality[air_quality['parameter'] == "no2"]
no2.head()
citycountrylocationparametervalueunit
date.utc
2019-06-21 00:00:00+00:00ParisFRFR04014no220.0µg/m³
2019-06-20 23:00:00+00:00ParisFRFR04014no221.8µg/m³
2019-06-20 22:00:00+00:00ParisFRFR04014no226.5µg/m³
2019-06-20 21:00:00+00:00ParisFRFR04014no224.9µg/m³
2019-06-20 20:00:00+00:00ParisFRFR04014no221.4µg/m³
no2_subset = no2.sort_index().groupby(["location"]).head(2)
no2_subset
citycountrylocationparametervalueunit
date.utc
2019-04-09 01:00:00+00:00AntwerpenBEBETR801no222.5µg/m³
2019-04-09 01:00:00+00:00ParisFRFR04014no224.4µg/m³
2019-04-09 02:00:00+00:00LondonGBLondon Westminsterno267.0µg/m³
2019-04-09 02:00:00+00:00AntwerpenBEBETR801no253.5µg/m³
2019-04-09 02:00:00+00:00ParisFRFR04014no227.4µg/m³
2019-04-09 03:00:00+00:00LondonGBLondon Westminsterno267.0µg/m³

在这里插入图片描述

我希望三个站的值作为彼此相邻的单独列。

no2_subset.pivot(columns="location", values="value")
locationBETR801FR04014London Westminster
date.utc
2019-04-09 01:00:00+00:0022.524.4NaN
2019-04-09 02:00:00+00:0053.527.467.0
2019-04-09 03:00:00+00:00NaNNaN67.0

pivot() 函数纯粹是对数据的重塑:每个索引/列组合都需要一个值。

由于 pandas 支持开箱即用地绘制多列,因此从长表格式到宽表格式的转换可以同时绘制不同的时间序列:

no2.head()
citycountrylocationparametervalueunit
date.utc
2019-06-21 00:00:00+00:00ParisFRFR04014no220.0µg/m³
2019-06-20 23:00:00+00:00ParisFRFR04014no221.8µg/m³
2019-06-20 22:00:00+00:00ParisFRFR04014no226.5µg/m³
2019-06-20 21:00:00+00:00ParisFRFR04014no224.9µg/m³
2019-06-20 20:00:00+00:00ParisFRFR04014no221.4µg/m³
no2.pivot(columns="location", values="value").plot()
<AxesSubplot:xlabel='date.utc'>

在这里插入图片描述

如果未定义索引参数,则使用现有index(行标签)。

【3】数据透视表

在这里插入图片描述

我想要平均浓度 N O 2 NO_2 NO2 P M 2.5 PM_{2.5} PM2.5 在每个站点中以表格形式出现。

air_quality.pivot_table(
    values="value", index="location", columns="parameter", aggfunc="mean"
)
parameterno2pm25
location
BETR80126.95092023.169492
FR0401429.374284NaN
London Westminster29.74005013.443568

在 pivot() 的情况下,数据只是重新排列。当需要聚合多个值(在此特定情况下,不同时间步长上的值)时,可以使用pivot_table()提供有关如何组合这些值的聚合函数(例如平均值)。

数据透视表是电子表格软件中众所周知的概念。如果对每个变量的行/列边距(小计)感兴趣,请将margins参数设置为 True:

air_quality.pivot_table(
    values="value",
    index="location",
    columns="parameter",
    aggfunc="mean",
    margins=True,
)
parameterno2pm25All
location
BETR80126.95092023.16949224.982353
FR0401429.374284NaN29.374284
London Westminster29.74005013.44356821.491708
All29.43031614.38684924.222743

如果您想知道,pivot_table()) 确实与 groupby() 直接链接。通过对parameter和location进行分组,可以得出相同的结果:

air_quality.groupby(["parameter", "location"]).mean()
C:\Users\DingJiaxiong\AppData\Local\Temp\ipykernel_368\2980048512.py:1: FutureWarning: The default value of numeric_only in DataFrameGroupBy.mean is deprecated. In a future version, numeric_only will default to False. Either specify numeric_only or select only columns which should be valid for the function.
  air_quality.groupby(["parameter", "location"]).mean()
value
parameterlocation
no2BETR80126.950920
FR0401429.374284
London Westminster29.740050
pm25BETR80123.169492
London Westminster13.443568

【4】宽幅到长幅

从上一节中创建的宽格式表再次开始,我们使用 reset_index() 向DataFrame添加新索引.

no2_pivoted = no2.pivot(columns="location", values="value").reset_index()
no2_pivoted.head()
locationdate.utcBETR801FR04014London Westminster
02019-04-09 01:00:00+00:0022.524.4NaN
12019-04-09 02:00:00+00:0053.527.467.0
22019-04-09 03:00:00+00:0054.534.267.0
32019-04-09 04:00:00+00:0034.548.541.0
42019-04-09 05:00:00+00:0046.559.541.0

在这里插入图片描述

我想收集所有空气质量 N O 2 NO_2 NO2 单列测量(长格式)。

no_2 = no2_pivoted.melt(id_vars="date.utc")
no_2.head()
date.utclocationvalue
02019-04-09 01:00:00+00:00BETR80122.5
12019-04-09 02:00:00+00:00BETR80153.5
22019-04-09 03:00:00+00:00BETR80154.5
32019-04-09 04:00:00+00:00BETR80134.5
42019-04-09 05:00:00+00:00BETR80146.5

DataFrame上的 pandas.melt() 方法将数据表从宽格式转换为长格式。列标题将成为新创建的列中的变量名称。

解决方案是如何应用 pandas.melt() 的简短版本。该方法会将id_vars中未提及的所有列融化为两列:一列包含列标题名称,一列包含值本身。后一列默认获取名称value.

传递给 pandas.melt() 的参数可以更详细地定义:

no_2 = no2_pivoted.melt(
    id_vars="date.utc",
    value_vars=["BETR801", "FR04014", "London Westminster"],
    var_name="NO_2",
    value_name="id_location",
)
no_2.head()
date.utcNO_2id_location
02019-04-09 01:00:00+00:00BETR80122.5
12019-04-09 02:00:00+00:00BETR80153.5
22019-04-09 03:00:00+00:00BETR80154.5
32019-04-09 04:00:00+00:00BETR80134.5
42019-04-09 05:00:00+00:00BETR80146.5

附加参数具有以下效果:

value_vars定义要融合在一起的列

value_name为值列提供自定义列名,而不是默认列名value
var_name为收集列标题名称的列提供自定义列名。否则,它采用索引名称或默认variable

因此,参数 value_name 和 var_name 只是两个生成的列的用户定义名称。要熔化的柱由id_vars和value_vars定义.

【小结】

sort_values支持按一列或多列排序.

pivot函数纯粹是数据的重组,pivot_table支持聚合。

pivot(长格式到宽格式)的反面是melt(宽格式到长格式)。

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

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

相关文章

3.11.1、虚拟局域网 VLAN 概述

以太网交换机工作在数据链路层&#xff08;也包括物理层) 使用一个或多个以太网交换机互连起来的交换式以太网&#xff0c;其所有站点都属于同一个广播域。 随着交换式以太网规模的扩大&#xff0c;广播域相应扩大。 巨大的广播域会带来很多弊端: 广播风暴难以管理和维护潜在…

LVGL学习笔记2 - 对象

目录 1. 创建对象 2. 设置大小 3. 设置位置 4. 设置对齐方式 5. 对象的父子关系 6. 其他 前面的例子中&#xff0c;一个矩形创建都是用到obj的函数&#xff0c;obj即是指对象。LVGL的基本要素是对象&#xff0c;实现了屏幕上组件的基本属性&#xff0c;包括大小、坐标、父…

SQLite数据库-学生管理系统(2.0)

SQLite数据库-学生管理系统 1.要求 布局文件 --------View层Activity文件---------Controller层Helper文件&#xff1a;建立数据库和表&#xff0c;版本更新Dao层&#xff1a;对数据库表中数据增删改查操作Entity&#xff1a;数据库在项目中的类&#xff0c;主要用于定义与数据…

短视频创业:大部分人都误解了豆荚的作用,掌握正确方法你就悟了

短视频&#xff0c;豆荚是避不过的功能&#xff0c;那么豆荚的作用和要不要投豆荚呢&#xff1f; 对于一般人来说&#xff0c;可能会觉得那投豆荚就是向买粉丝、买播放量、买数据的这么一个付费工具 对于一个专业的短视频运营来说&#xff0c;它其实是一个撬动自然流量的工具…

GROMACS模拟分析-自由能形貌图的绘制

自由能形貌&#xff08;free energy landscape&#xff0c;FEL&#xff09;表征了模拟过程中蛋白质的自由能变化。自由能形貌图一般通过两个描述体系特征的量来进行绘制&#xff0c;例如RMSD和Rg&#xff0c;也有文献中用主成分分析PC1和PC2绘制。本文以RMSD和Rg两个特征量绘制…

C++ 实现字符串查找 KMP算法

前言 众所周知&#xff0c;字符串查找的应用范围非常广&#xff0c;网页上有各式各样的浏览器搜索&#xff0c;再到编程需要的vsCode或vsStudio都自带了搜索功能&#xff1b;一个查找算法的优劣可以直接影响用户的搜索体验如何但鉴于暴力搜索算法的O(m * n)复杂度&#xff0c;…

精选测试面试题

一、Web自动化测试 1.Selenium中hidden或者是display &#xff1d; none的元素是否可以定位到&#xff1f; 不能,可以写JavaScript将标签中的hidden先改为0&#xff0c;再定位元素 2.Selenium中如何保证操作元素的成功率&#xff1f;也就是说如何保证我点击的元素一定是可以…

图文并茂的介绍用word生成一个很智能的目录

文章目录前期准备设置各级目录的字体样式准备一个新的页面&#xff08;装目录&#xff09;大工告成&#xff01;作为一名程序员&#xff0c;写代码自然是我们的强项&#xff0c;除了写写代码使用计算机的能力也渐渐成为了考察我们的指标&#xff0c;今天我们介绍一个办公小技巧…

【图神经网络】Pytorch图神经网络库——PyG异构图学习

PyG异构图学习举个例子创建异构图Utility函数异构图Transformations创建异构图神经网络自动转换GNN模型使用异构卷积包装器部署现有的异构算子异构图采样参考资料大量真实世界数据集存储为异构图&#xff0c;这促使Pytorch Geometric&#xff08;PyG&#xff09;中引入专门的功…

Java项目:Springboot实现的一个简单博客管理系统

作者主页&#xff1a;源码空间站2022 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 本项目为前后台管理系统&#xff0c;包括博主与游客两种角色&#xff1b; 博主角色包含以下功能&#xff1a; 博主登录,发博客,博主可以删除博客…

使用yolov5 v7.0进行实例分割

1. 介绍 U版yolov5最新推出了v7.0版本,新增了基于yolov5进行实例分割的代码。作者提到yolov5 v7.0实现的实例分割是超越了所有的SOTA模型的效果,是目前为止速度和精度最高的。 2. 代码的使用 2.1 Setup 克隆GitHub仓库,安装依赖项,检查PyTorch和GPU。 git clone http…

GEO芯片数据分析更新(补富集分析与WGCNA)

GEO数据挖掘&#xff0c;表达芯片分析 举例&#xff1a;王同学近期拟通过生物信息学相关软件与数据库来探讨女性非抽烟者的非小细胞肺癌预后相关的显著性基因及潜在的治疗靶点&#xff0c;他在NCBI上查询到了1套芯片数据GSE19804。请帮助他完成该项目的设计与分析。 上一篇博…

Linux系统基础——内核初始化

内核初始化 特此说明: 刘超的趣谈linux操作系统是比较重要的参考资料&#xff0c;本文大部分内容和所有图片来源于这个专栏。 1 背景知识 BootLoader阶段后&#xff0c;cpu从实模式转换成保护模式。有了更强的寻址能力后&#xff0c;内核也已经加载到内存了&#xff0c;系统内…

2. 做一个极简 UI 库之Toast 组件

效果 API 设计 先设计好了 API 写起来代码才不会犯迷糊 Toast(message: string; otherParams?: ToastParams): ToastReturninterface ToastParams {time?: number;appendTo?: string | HTMLElement;dangerouslyUseHTMLString?: boolean; }interface ToastReturn {close():v…

Node.js - Express

文章目录目标一、初识 Express1、Express 简介&#xff08;1&#xff09;什么是 Express&#xff08;2&#xff09;进一步理解 Express&#xff08;3&#xff09;Express 能做什么2、Express 的基本使用&#xff08;1&#xff09;安装&#xff08;2&#xff09;创建基本的 Web …

认识 Fuchsia OS

认识 Fuchsia OS 1 说明背景 1.1 基本信息 开发者: Google编程语言: C、C、Rust、Go、Python、Dart内核: Zircon运作状态: 当前源码模式: 开放源代码初始版本: 2016年8月15日支持的语言: 英语支持平台: ARM64、X86-64内核类别: 微内核 基于能力 实时操作系统许可证: BSD 3 c…

node.js+uni计算机毕设项目高校迎新管理小程序(程序+小程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置&#xff1a; Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等…

【2023 AR元宇宙过圣诞!】《Merry Meta Christmas》

啥也不说了&#xff0c;先看最终效果 3D场景资源、EasyAR_Plugin、图片与安卓App资源均已上传&#xff0c;点击该处下载 一、前言 圣诞节的真正含义是为了纪念耶稣诞生&#xff0c;象征着团圆美满&#xff0c;万物复苏&#xff0c;日子变得愈发美好 2021年是元宇宙的元年&…

UE5 狐獴演示Demo分析

1.特效的生成方式 1.1临时特效的生成&#xff1a;使用了已生成轨道临时创建该特效&#xff08;不用在场景中放入该特效&#xff0c;而是临时创建即可&#xff09;、系统生命周期轨道设置该特效的播放时长 1.2长期特效的生成&#xff1a;特效时长为该镜头片段长度 2.特效的类…

输出数组中每一行(列)中的最小值(最大值)numpy.amin()numpy.amax()

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 输出数组中每一行&#xff08;列&#xff09;中的最小值&#xff08;最大值&#xff09; numpy.amin() numpy.amax() [太阳]选择题 对下面代码中np.amin(myList, 0)输出的结果为&#xff1f;…