【pandas】教程:8-如何组合多个表格的数据

news2024/9/20 18:53:15

Pandas 组合多个表格的数据

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

在这里插入图片描述

在这里插入图片描述

导入数据

  • N O 2 NO_2 NO2
import pandas as pd 
air_quality_no2 = pd.read_csv("data/air_quality_no2_long.csv",
                            parse_dates=True)
air_quality_no2 = air_quality_no2[["date.utc", "location",
                                "parameter", "value"]]

air_quality_no2
                       date.utc            location parameter  value
0     2019-06-21 00:00:00+00:00             FR04014       no2   20.0
1     2019-06-20 23:00:00+00:00             FR04014       no2   21.8
2     2019-06-20 22:00:00+00:00             FR04014       no2   26.5
3     2019-06-20 21:00:00+00:00             FR04014       no2   24.9
4     2019-06-20 20:00:00+00:00             FR04014       no2   21.4
...                         ...                 ...       ...    ...
2063  2019-05-07 06:00:00+00:00  London Westminster       no2   26.0
2064  2019-05-07 04:00:00+00:00  London Westminster       no2   16.0
2065  2019-05-07 03:00:00+00:00  London Westminster       no2   19.0
2066  2019-05-07 02:00:00+00:00  London Westminster       no2   19.0
2067  2019-05-07 01:00:00+00:00  London Westminster       no2   23.0

[2068 rows x 4 columns]
  • P M 2.5 PM2.5 PM2.5
air_quality_pm25 = pd.read_csv("data/air_quality_pm25_long.csv",
                            parse_dates=True)
air_quality_pm25 = air_quality_pm25[["date.utc", "location",
                                    "parameter", "value"]]
air_quality_pm25
                       date.utc            location parameter  value
0     2019-06-18 06:00:00+00:00             BETR801      pm25   18.0
1     2019-06-17 08:00:00+00:00             BETR801      pm25    6.5
2     2019-06-17 07:00:00+00:00             BETR801      pm25   18.5
3     2019-06-17 06:00:00+00:00             BETR801      pm25   16.0
4     2019-06-17 05:00:00+00:00             BETR801      pm25    7.5
...                         ...                 ...       ...    ...
1105  2019-05-07 06:00:00+00:00  London Westminster      pm25    9.0
1106  2019-05-07 04:00:00+00:00  London Westminster      pm25    8.0
1107  2019-05-07 03:00:00+00:00  London Westminster      pm25    8.0
1108  2019-05-07 02:00:00+00:00  London Westminster      pm25    8.0
1109  2019-05-07 01:00:00+00:00  London Westminster      pm25    8.0

[1110 rows x 4 columns]

数据连接 (concat)

在这里插入图片描述

  • 将同样数据结构的两个表格的数据连接在一起
air_quality = pd.concat([air_quality_pm25, air_quality_no2], axis=0)
air_quality
                       date.utc            location parameter  value
0     2019-06-18 06:00:00+00:00             BETR801      pm25   18.0
1     2019-06-17 08:00:00+00:00             BETR801      pm25    6.5
2     2019-06-17 07:00:00+00:00             BETR801      pm25   18.5
3     2019-06-17 06:00:00+00:00             BETR801      pm25   16.0
4     2019-06-17 05:00:00+00:00             BETR801      pm25    7.5
...                         ...                 ...       ...    ...
2063  2019-05-07 06:00:00+00:00  London Westminster       no2   26.0
2064  2019-05-07 04:00:00+00:00  London Westminster       no2   16.0
2065  2019-05-07 03:00:00+00:00  London Westminster       no2   19.0
2066  2019-05-07 02:00:00+00:00  London Westminster       no2   19.0
2067  2019-05-07 01:00:00+00:00  London Westminster       no2   23.0

[3178 rows x 4 columns]

concat 会将两个表格连接起来,默认 行连接(rows 增多),也可以设置为 列连接(columns 增多)

  • 按日期排序
air_quality = air_quality.sort_values("date.utc")
air_quality.head()
                       date.utc            location parameter  value
2067  2019-05-07 01:00:00+00:00  London Westminster       no2   23.0
1003  2019-05-07 01:00:00+00:00             FR04014       no2   25.0
100   2019-05-07 01:00:00+00:00             BETR801      pm25   12.5
1098  2019-05-07 01:00:00+00:00             BETR801       no2   50.5
1109  2019-05-07 01:00:00+00:00  London Westminster      pm25    8.0

使用多个表格公共的标识符连接表格 (merge)

在这里插入图片描述

stations_coord = pd.read_csv("data/air_quality_stations.csv")
stations_coord
                      location  coordinates.latitude  coordinates.longitude
0                      BELAL01              51.23619                4.38522
1                      BELHB23              51.17030                4.34100
2                      BELLD01              51.10998                5.00486
3                      BELLD02              51.12038                5.02155
4                      BELR833              51.32766                4.36226
..                         ...                   ...                    ...
61             Southend-on-Sea              51.54420                0.67841
62  Southwark A2 Old Kent Road              51.48050               -0.05955
63                    Thurrock              51.47707                0.31797
64      Tower Hamlets Roadside              51.52253               -0.04216
65        Groton Fort Griswold              41.35360              -72.07890

[66 rows x 3 columns]
air_quality_merge = pd.merge(air_quality, stations_coord, how="left", on="location")
air_quality_merge
                       date.utc            location parameter  value  \
0     2019-05-07 01:00:00+00:00  London Westminster       no2   23.0   
1     2019-05-07 01:00:00+00:00             FR04014       no2   25.0   
2     2019-05-07 01:00:00+00:00             FR04014       no2   25.0   
3     2019-05-07 01:00:00+00:00             BETR801      pm25   12.5   
4     2019-05-07 01:00:00+00:00             BETR801       no2   50.5   
...                         ...                 ...       ...    ...   
4177  2019-06-20 23:00:00+00:00             FR04014       no2   21.8   
4178  2019-06-20 23:00:00+00:00             FR04014       no2   21.8   
4179  2019-06-21 00:00:00+00:00  London Westminster      pm25    7.0   
4180  2019-06-21 00:00:00+00:00             FR04014       no2   20.0   
4181  2019-06-21 00:00:00+00:00             FR04014       no2   20.0   

      coordinates.latitude  coordinates.longitude  
0                 51.49467               -0.13193  
1                 48.83724                2.39390  
2                 48.83722                2.39390  
3                 51.20966                4.43182  
4                 51.20966                4.43182  
...                    ...                    ...  
4177              48.83724                2.39390  
4178              48.83722                2.39390  
4179              51.49467               -0.13193  
4180              48.83724                2.39390  
4181              48.83722                2.39390  

[4182 rows x 6 columns]

使用 merge ,对于 air_quality 表中的每一行,都从 air_quality_stations_coord 表中添加相应的坐标,两个表都有相同的列位置,用作组合信息的键。merge 函数支持多个连接选项,类似于数据库风格的操作。

air_quality_parameters = pd.read_csv("data/air_quality_parameters.csv")
air_quality_merge2 = pd.merge(air_quality_merge, air_quality_parameters, 
                            how="left", left_on="parameter", right_on='id')
air_quality_merge2
                      date.utc            location parameter  value  \
0     2019-05-07 01:00:00+00:00  London Westminster       no2   23.0   
1     2019-05-07 01:00:00+00:00             FR04014       no2   25.0   
2     2019-05-07 01:00:00+00:00             FR04014       no2   25.0   
3     2019-05-07 01:00:00+00:00             BETR801      pm25   12.5   
4     2019-05-07 01:00:00+00:00             BETR801       no2   50.5   
...                         ...                 ...       ...    ...   
4177  2019-06-20 23:00:00+00:00             FR04014       no2   21.8   
4178  2019-06-20 23:00:00+00:00             FR04014       no2   21.8   
4179  2019-06-21 00:00:00+00:00  London Westminster      pm25    7.0   
4180  2019-06-21 00:00:00+00:00             FR04014       no2   20.0   
4181  2019-06-21 00:00:00+00:00             FR04014       no2   20.0   

      coordinates.latitude  coordinates.longitude    id  \
0                 51.49467               -0.13193   no2   
1                 48.83724                2.39390   no2   
2                 48.83722                2.39390   no2   
3                 51.20966                4.43182  pm25   
4                 51.20966                4.43182   no2   
...                    ...                    ...   ...   
4177              48.83724                2.39390   no2   
4178              48.83722                2.39390   no2   
4179              51.49467               -0.13193  pm25   
4180              48.83724                2.39390   no2   
4181              48.83722                2.39390   no2   
...
4179  Particulate matter less than 2.5 micrometers i...  PM2.5  
4180                                   Nitrogen Dioxide    NO2  
4181                                   Nitrogen Dioxide    NO2  

[4182 rows x 9 columns]

记住

多个表格的连接,可以用 concat 函数,可以基于 column,也可以基于 row 的连接

对于类似于数据库的 merging/joining 表格,可以使用 merge 函数。

参考

  1. How to combine data from multiple tables? — pandas 1.5.2 documentation (pydata.org)

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

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

相关文章

二、python编程进阶02:模块和包

目录 1. python中的模块是什么 2. 导入模块: 学习import语句 2.1 import语句介绍 2.2 import导入模块的语法 2.3 导入自己的模块 2.4 导入数字开头或者带空格的模块 3. 编写自定义模块 3.1 给自定义模块编写测试代码 3.2 给自定义模块模块编写说明文档 4. 模块的搜索…

1215. 小朋友排队(树状数组应用 -- 逆序对个数)

题目如下: 思路 or 题解 我们可以得出交换的次数 > 逆序对个数 kkk 我们可以发现 所有 位置 左边大于它的个数 右边小于它的个数和 kik_iki​ 等于 k∗2k*2k∗2 我们可以简单证明出(感觉出):答案就是 ∑1n(1ki)∗ki2\sum^n_1 \frac{(1 k_i) * k_i}…

JavaScript 错误

文章目录JavaScript 错误 - throw、try 和 catchJavaScript 错误JavaScript 抛出(throw)错误JavaScript try 和 catchThrow 语句实例实例JavaScript 错误 - throw、try 和 catch try 语句测试代码块的错误。 catch 语句处理错误。 throw 语句创建自定义错…

string的使用介绍

目录 标准库中的string类 string类(了解) 编码介绍 string类的常用接口说明 Member functions 测试一:创建对象 测试二:遍历字符串 Iterators 测试三:反向迭代器(Iterators) Capacity 测试四:容器相关(Capacity) 测试…

Redis企业云如何通过缓存轻松扩展到亿级请求?

你是否在春运抢票过程中遇到12306 APP瘫痪? 你是否在双十一抢好物的时候显示系统繁忙? 你是否在微博刷某个爆了的娱乐新闻时显示页面走丢了? 前几天热搜上好像又说小红书又崩溃了? 当用户请求量过高,数据库无法支撑时&…

Annotation(注解)

一、注解概述1.从 JDK 5.0 开始,Java 增加了对元数据(MetaData) 的支持,也就是Annotation(注解)2.Annotation 其实就是代码里的特殊标记,这些标记可以在编译,类加载,运行时被读取,并执行相应的处理。通过使用 Annotation,程序员可以在不改变原有逻辑的情况下,在源文件中嵌入一些…

Go第 6 章:函数、包和错误处理

Go第 6 章:函数、包和错误处理 6.1 为什么需要函数 6.1.1请大家完成这样一个需求: 输入两个数,再输入一个运算符(,-,*,/),得到结果.。 6.1.2使用传统的方法解决 分析一下上面代码问题 上面的写法是可以完成功能, 但是代码冗余同时不利于代码维护函数…

SAP FICO 成本对象控制解析

成本对象控制(Cost Object Cotrol)是指对不同的成本对象,比如成本收集器、生产订单、销售订单等进行成本的期末结算。基于这些不同的成本对象,SAP在成本对象控制菜单下面细分了相应的操作(SAP 菜单 →会计核算 →控制 …

JavaScript篇.day10-面向对象,对象,构造函数,this关键字,原型

目录面向对象对象构造函数this关键字原型面向对象面向过程: 在开发过程中,关注过程的开发方式. 在开发时关注每一个细节,步骤和顺序.面向对象: 在开发过程中,只需要找一个对象来完成事情的开发思想对象: 在生活中,万物皆对象 封装: 将完成步骤封装在对象内部属性: 对象的特征核…

Java泛型上界与泛型方法的应用 | 如何通过泛型类获取任意类型的三个数的最大值?

目录 一、引言 二、泛型上界 1、什么是泛型的上界 2、泛型上界的语法 三、泛型方法 1、泛型方法的语法 2、泛型方法的类型推导 三、编程分析 1、MyCompare泛型类 2、泛型方法实现 四、总结 一、引言 初学Java时,同学们基本都会遇到这样一个基础编程题&am…

平面设计师去哪里找素材?

5个平面设计素材网站,赶紧收藏! 1、菜鸟图库 https://www.sucai999.com/?vNTYwNDUx ​ 站内平面海报、UI设计、电商淘宝、免抠、高清图片、样机模板等素材非常齐全。还有在线抠图、CDR版本转换功能,能有效的为设计师节省找素材时间&#x…

MySQL查询训练题1

表信息: dept表和emp表 bonus表和salgrade表 练习题: 1、选择部门30中的所有员工; select * from Emp where DEPTNO30;2、列出所有办事员(CLERK)的姓名,编号和部门编号; select ENAME 姓名,EMPNO 编号,DEPTNO 部门…

【vue2中使用axios和插槽】一.组件的生命周期;二.vue2中使用axios;三.插槽

目录 一.组件的生命周期 1.组件的生命周期经历的阶段: (1)创建阶段:beforeCreate、created、beforeMount、mounted (2)运行阶段:beforeUpdate、update (3)销毁阶段&a…

C++ 学习 Day.10(标准模板库简介)

标准模板库: 简单地说,标准模板库(STL)是一组模板类和函数,向程序员提供了: • 用于存储信息的容器; • 用于访问容器存储的信息的迭代器; • 用于操作容器内容的算法。 关于STL可见…

Git学习和使用

目录:Git概念和知识Git的四个工作区域和工作流程Git 的四个工作区域Git 的工作流程git文件状态常用操作进阶操作单个本地库绑定多远程仓库方案Git概念和知识 Git的四个工作区域和工作流程 Git 的四个工作区域 Remote:远程仓库 位于托管代码的服务器&a…

【语义分割】语义分割综述文章

目录:语义分割一、什么是语义分割二、什么是图像中的语义信息?三、语义分割中的上下文信息四、语义分割方法五、语义分割神经网络六、目前比较经典的网络七、评价指标一、什么是语义分割 语义分割,也称为像素级分类问题,其输出和…

如何远程访问别人的MySQL数据库

1、 如何远程访问别人的MySQL数据库 - curryzwy - 博客园 (cnblogs.com)https://www.cnblogs.com/curryzwy/p/15730485.html 2、 mysql——同一局域网如何共同访问一台电脑的数据库(胎教级教学)_七月星辰的博客-CSDN博客_两台电脑共用一个mysql数据库…

1803. 统计异或值在范围内的数对有多少

解法一:字典树 前置知识:字典树 字典树是一种实现字符串快速检索的多叉树结构。 例如:给定字符串集合[cab, cos, car, cat], 我们现在需要判断cat是否存在于字符串集合中。 字典树代码: static int[][] trie new int[N][26]; …

AcWing 1221. 四平方和(二分或哈希)

一、题目描述 二、思路分析 先从时间复杂度的角度入手,这道题的数据范围是106,因此我们的时间复杂度要控制在O(n)O(n)O(n)或者O(nlogn)O(nlogn)O(nlogn)。 对于abcd中的任何一个元素,必定是小于n\sqrt nn​的。 我们的一个思路就是去枚举&…

如何选择用 .net Framework 或 .net core

小米问: 给你一个项目,如何选择用 netframework 或 netcore?如何选择服务器? 怎么去考虑? 咋回答呢 答: 不要考虑.net framework 除非极其特殊的情况 比如目标主机系统版本较低 服务器自然是linux好&a…