【pandas】教程:7-调整表格数据的布局

news2024/9/28 3:24:34

Pandas 调整表格的布局

本节使用的数据为 data/titanic.csv,链接为 pandas案例和教程所使用的数据-机器学习文档类资源-CSDN文库

在这里插入图片描述

  • 导入数据
import pandas as pd 
titanic = pd.read_csv("data/titanic.csv")
titanic.head()
   PassengerId  Survived  Pclass  \
0            1         0       3   
1            2         1       1   
2            3         1       3   
3            4         1       1   
4            5         0       3   

                                                Name     Sex   Age  SibSp  \
0                            Braund, Mr. Owen Harris    male  22.0      1   
1  Cumings, Mrs. John Bradley (Florence Briggs Th...  female  38.0      1   
2                             Heikkinen, Miss. Laina  female  26.0      0   
3       Futrelle, Mrs. Jacques Heath (Lily May Peel)  female  35.0      1   
4                           Allen, Mr. William Henry    male  35.0      0   

   Parch            Ticket     Fare Cabin Embarked  
0      0         A/5 21171   7.2500   NaN        S  
1      0          PC 17599  71.2833   C85        C  
2      0  STON/O2. 3101282   7.9250   NaN        S  
3      0            113803  53.1000  C123        S  
4      0            373450   8.0500   NaN        S  

行数据的排序

  • 将 Titanic 中的乘客按照年龄进行排序
titanic.sort_values(by="Age").head()
     PassengerId  Survived  Pclass                             Name     Sex  \
803          804         1       3  Thomas, Master. Assad Alexander    male   
755          756         1       2        Hamalainen, Master. Viljo    male   
644          645         1       3           Baclini, Miss. Eugenie  female   
469          470         1       3    Baclini, Miss. Helene Barbara  female   
78            79         1       2    Caldwell, Master. Alden Gates    male   

      Age  SibSp  Parch  Ticket     Fare Cabin Embarked  
803  0.42      0      1    2625   8.5167   NaN        C  
755  0.67      1      1  250649  14.5000   NaN        S  
644  0.75      2      1    2666  19.2583   NaN        C  
469  0.75      2      1    2666  19.2583   NaN        C  
78   0.83      0      2  248738  29.0000   NaN        S  
  • 将 Titanic 的数据按照年龄和 舱等级进行降序排序
# 排序
sorted_agepclass = titanic.sort_values(by=['Pclass', 'Age'], ascending=False)
sorted_agepclass.head()
     PassengerId  Survived  Pclass                       Name     Sex   Age  \
851          852         0       3        Svensson, Mr. Johan    male  74.0   
116          117         0       3       Connors, Mr. Patrick    male  70.5   
280          281         0       3           Duane, Mr. Frank    male  65.0   
483          484         1       3     Turkula, Mrs. (Hedwig)  female  63.0   
326          327         0       3  Nysveen, Mr. Johan Hansen    male  61.0   

     SibSp  Parch  Ticket    Fare Cabin Embarked  
851      0      0  347060  7.7750   NaN        S  
116      0      0  370369  7.7500   NaN        Q  
280      0      0  336439  7.7500   NaN        Q  
483      0      0    4134  9.5875   NaN        S  
326      0      0  345364  6.2375   NaN        S  

DataFrame.sort_values() 对表格数据进行排序,
表格里的行数据就会根据定义的列进行索引排序。

长的表格数据转换为宽的表格数据

我们取 N O 2 NO_2 NO2 的数据进行分析;

air_quality = pd.read_csv(
    "data/air_quality_long.csv", index_col="date.utc", parse_dates=True
)
air_quality.head()
                                city country location parameter  value   unit
date.utc                                                                     
2019-06-18 06:00:00+00:00  Antwerpen      BE  BETR801      pm25   18.0  µg/m³
2019-06-17 08:00:00+00:00  Antwerpen      BE  BETR801      pm25    6.5  µg/m³
2019-06-17 07:00:00+00:00  Antwerpen      BE  BETR801      pm25   18.5  µg/m³
2019-06-17 06:00:00+00:00  Antwerpen      BE  BETR801      pm25   16.0  µg/m³
2019-06-17 05:00:00+00:00  Antwerpen      BE  BETR801      pm25    7.5  µg/m³
# 只取 no2的数据
no2 = air_quality[air_quality["parameter"] == "no2"]

# 利用 groupby 对每个位置进行聚类 
no2_subset = no2.sort_index().groupby(['location']).head(2)
no2_subset.head()

                                city country            location parameter  \
date.utc                                                                     
2019-04-09 01:00:00+00:00  Antwerpen      BE             BETR801       no2   
2019-04-09 01:00:00+00:00      Paris      FR             FR04014       no2   
2019-04-09 02:00:00+00:00     London      GB  London Westminster       no2   
2019-04-09 02:00:00+00:00  Antwerpen      BE             BETR801       no2   
2019-04-09 02:00:00+00:00      Paris      FR             FR04014       no2   

                           value   unit  
date.utc                                 
2019-04-09 01:00:00+00:00   22.5  µg/m³  
2019-04-09 01:00:00+00:00   24.4  µg/m³  
2019-04-09 02:00:00+00:00   67.0  µg/m³  
2019-04-09 02:00:00+00:00   53.5  µg/m³  
2019-04-09 02:00:00+00:00   27.4  µg/m³  

在这里插入图片描述

  • 将三个station的值作为单独的相邻列
no2_subset.pivot(columns="location", values="value")
location                   BETR801  FR04014  London Westminster
date.utc                                                       
2019-04-09 01:00:00+00:00     22.5     24.4                 NaN
2019-04-09 02:00:00+00:00     53.5     27.4                67.0
2019-04-09 03:00:00+00:00      NaN      NaN                67.0

pivot() 是单纯的将数据 reshape
由于pandas支持开箱即用的多列绘图(参见绘图教程),从长表格式到宽表格式的转换可以同时绘制不同的时间序列:

no2.pivot(columns="location", values="value").plot()

在这里插入图片描述

数据透视

在这里插入图片描述

  • 统计每个 station 的 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")
parameter                 no2       pm25
location                                
BETR801             26.950920  23.169492
FR04014             29.374284        NaN
London Westminster  29.740050  13.443568

pivot() 只对数据进行重新组织,多个数据聚合时,使用 pivot_table()
数据透视表是电子表格软件中一个众所周知的概念。当对每个变量的行/列 margin(小计)感兴趣时,将margin参数设置为True:
air_quality.pivot_table( values="value", index="location", columns="parameter", aggfunc="mean", margins=True, )

宽表类型转换为长表类型

在这里插入图片描述

no2_pivoted = no2.pivot(columns="location", values="value").reset_index()
location                  date.utc  BETR801  FR04014  London Westminster
0        2019-04-09 01:00:00+00:00     22.5     24.4                 NaN
1        2019-04-09 02:00:00+00:00     53.5     27.4                67.0
2        2019-04-09 03:00:00+00:00     54.5     34.2                67.0
3        2019-04-09 04:00:00+00:00     34.5     48.5                41.0
4        2019-04-09 05:00:00+00:00     46.5     59.5                41.0
  • N O 2 NO_2 NO2 测量数据放到单列里;
no_2 = no2_pivoted.melt(id_vars="date.utc")
no_2.head()
                   date.utc location  value
0 2019-04-09 01:00:00+00:00  BETR801   22.5
1 2019-04-09 02:00:00+00:00  BETR801   53.5
2 2019-04-09 03:00:00+00:00  BETR801   54.5
3 2019-04-09 04:00:00+00:00  BETR801   34.5
4 2019-04-09 05:00:00+00:00  BETR801   46.5
no_2 = no2_pivoted.melt(
    id_vars="date.utc",
    value_vars=["BETR801", "FR04014", "London Westminster"],
    value_name="NO_2",
    var_name="id_location",
)
no_2.head()
                   date.utc id_location  NO_2
0 2019-04-09 01:00:00+00:00     BETR801  22.5
1 2019-04-09 02:00:00+00:00     BETR801  53.5
2 2019-04-09 03:00:00+00:00     BETR801  54.5
3 2019-04-09 04:00:00+00:00     BETR801  34.5
4 2019-04-09 05:00:00+00:00     BETR801  46.5

pandas.melt() 将 DataFrame 从宽表转换为长表; 列头变成了变量;

记住

    1. 可以通过 sort_values 对一列和多列进行排序;
    1. pivot() 只是单纯的对数据进行重组,pivot_table() 支持聚合重组
    1. pivot() 的逆操作是 melt() 可以将宽表变成长表;

【参考】

How to reshape the layout of tables? — pandas 1.5.2 documentation (pydata.org)

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

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

相关文章

传感器工作原理以及传感器种类详解

随着物联网时代的到来,现代信息技术快速发展,其中包含了计算机技术、通信技术和传感器技术等,计算机相当于人类的大脑,通信技术类似人体的神经,而传感器就等同于人的感觉器官。从广义上说,传感器就是一种能…

存储控制器

存储控制器是按照一定的时序规则对存储器的访问进行必要控制的设备,包括地址信号、数据信号以及各种命令信号的控制,使主设备(访问存储器的设备)能够根据自己的要求使用存储器上的存储资源。 存储控制器的作用主要就是进行接口的转换,将主设…

通信原理 | 一些常用的概念记录

这篇文章只是记录平时了解到的一些概念,并没有针对性,比较杂乱,纯粹就是当做笔记本用的,各位看官请在茶余饭后的休闲时间阅读最为合适了解到新的概念的话,会随时更新世界四大导航系统 世界上有四大卫星导航系统,它们分别是美国的GPS、俄罗斯的格洛纳斯卫星导航系统、欧盟…

尚医通-SpringBoot整合MongoDB(十七)

目录: (1)MongDB-SpringBoot整合-MongoTemplate操作 (2)MongoTemplate操作2 (3)MongoTemplate操作3 (4)MongoDB-SpringBoot整合-MongoRepository操作 (1&a…

FIIL、南卡、漫步者蓝牙耳机怎么选?国产半入耳蓝牙耳机推荐

随着 TWS耳机市场的发展,越来越多的手机厂商,新晋的品牌,甚至是老牌的音频品牌都加入到了 TWS耳机的行列中,让消费者的选择范围变得更大。当前热销的南卡小音舱、漫步者Lolli3、FIIL CC2蓝牙耳机都是目前受消费者欢迎的&#xff0…

pyqt 显示图片的若干方法

date: 2022-11-30 14:23 status: public title: ‘pyqt 显示图片的若干方法’ 单张图片 使用lable 显示图片 特点是最简单,但功能也最少。 #!/usr/bin/env python # -*- coding: utf-8 -*- import sysfrom PyQt5.QtGui import QPixmap from PyQt5.QtWidgets impor…

JAVAGUI编程初识之AWT

文章目录前言一 GUI编程简介二 AWT简介2.1 组件(Component)和容器(Container)2.2 Frame2.2.1 演示1-创建一个窗口2.2.2 演示2-多个窗口的创建2.3 Panel2.3.1 演示-Panel使用三 布局管理3.1 布局管理器之FlowLayout3.1.1 FlowLayout简介3.1.2 演示-FlowLayout使用3.2 布局管理器…

电子签章结构以及规范讲解

前言: 安全电子签章是通过采用PKI公钥密码技术,将数字图像处理技术与电子签名技术进行结合,以电子形式对加盖印章图像数据的电子文档进行数字签名,以确保文档来源的真实性以及文档的完整性,防止对文档未经授权的篡改&…

算法训练 —— 链表(1)

目录 1. LeetCode203.移除链表元素 2. LeetCode21.合并两个有序链表 3. LeetCode206.翻转链表 4. LeetCode707.设计链表 1. LeetCode203.移除链表元素 移除链表元素 题解:通过两个指针来控制,cur和prev;cur指针去找val,prev…

冰冰学习笔记:位图与布隆过滤器

欢迎各位大佬光临本文章!!! 还请各位大佬提出宝贵的意见,如发现文章错误请联系冰冰,冰冰一定会虚心接受,及时改正。 本系列文章为冰冰学习编程的学习笔记,如果对您也有帮助,还请各位…

MySQL复制技术方案——半同步复制配置

Google为MySQL和InnoDB设计了一个大规模补丁集以量身打造服务器和存储引擎。其中一个修补程序可用于MySQL5.0版本,是半同步的复制补丁。MySQL已经打上了该补丁并在MySQL5.5中发布了。 半同步复制的理念是在允许更改操作继续执行前,确保更改操作至少被写…

34、基于STM32的电子时钟设计(DS1302)时钟、秒表、倒计时(Proteus仿真+程序)

编号:34 基于STM32的电子时钟设计(DS1302)时钟、秒表、倒计时 功能描述: 本系统由STM32F103系统LCD1602液晶显示按键模块DS1302时钟模块声光报警模块组成。 1、使用LCD1602显示当前日期、时间、星期 2、具有闹钟、倒计时、计时功…

【Java寒假打卡】Java基础-抽象类

【Java寒假打卡】Java基础-抽象类一、概述二、抽象类注意事项三、模板设计模式四、final关键字五、代码块一、概述 抽象方法:将共性的方法抽取到父类之后,发现该方法的实现逻辑无法在父类中给出具体明确,该方法就可定义为抽象方法抽象类&…

【C++初阶8-vector】熟悉的ta

前言 本期看看这位熟悉又陌生的朋友——vector。 博主水平有限,不足之处望请斧正! 是什么 vecotr是序列容器,可变大小的数组。 *vector有矢量、向量的意思,用其命名可能想强调“序列”这个概念。 class template std::vecto…

独占指针 std::unique_ptr

学习智能指针之前需要知道的&#xff1a; 智能指针是原始指针的封装&#xff0c;在头文件<memory>中&#xff0c;优点就是自动分配内存&#xff0c;不用担心潜在的内存泄漏。不是所有的指针都可以封装成智能指针&#xff0c;很多时候原始指针更方便。各指针中&#xff0…

Webpack中常见的Loader?解决了什么问题?

一、是什么 loader 用于对模块的源代码进行转换&#xff0c;在 import 或"加载"模块时预处理文件 webpack做的事情&#xff0c;仅仅是分析出各种模块的依赖关系&#xff0c;然后形成资源列表&#xff0c;最终打包生成到指定的文件中。如下图所示&#xff1a; 在web…

【网络安全】——web渗透的前缀知识

作者名&#xff1a;Demo不是emo 主页面链接&#xff1a;主页传送门 创作初心&#xff1a;舞台再大&#xff0c;你不上台&#xff0c;永远是观众&#xff0c;没人会关心你努不努力&#xff0c;摔的痛不痛&#xff0c;他们只会看你最后站在什么位置&#xff0c;然后羡慕或鄙夷座…

ArcGIS基础实验操作100例--实验18合并表格

本实验专栏来自于汤国安教授《地理信息系统基础实验操作100例》一书 实验平台&#xff1a;ArcGIS 10.6 实验数据&#xff1a;请访问实验1&#xff08;传送门&#xff09; 基础编辑篇--实验18 合并表格 目录 一、实验背景 二、实验数据 三、实验步骤 方法一&#xff1a;导出…

whisper

Robust Speech Recognition via Large-Scale Weak Supervision 介绍 大规模弱监督的训练。先前的方法都是通过大量的无监督学习训练&#xff08;无监督的数据容易收集&#xff0c;所以通过大量无监督的学习可以训练出一个质量较好的encoder&#xff09;。但是用的时候还需要找…

Redis配置文件

Redis配置文件 自定义目录 /myreids/redis.conf Units 单位 配置大小单位&#xff0c;开头定义了一些基本的度量单位&#xff0c;只支持bytes&#xff0c;不支持bit。大小写不敏感 INCLUDES 包含 多实例的情况可以把公用的配置文件提取出来 网络配置相关 bind 默认情况…