【Pandas入门教程】如何合并多个表中的数据

news2025/7/19 9:44:38

如何合并多个表中的数据

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

在这里插入图片描述

文章目录

    • 如何合并多个表中的数据
        • 导包
        • 数据准备
        • 【1】连接对象
        • 【2】使用通用标识符联接表
        • 【小结】

导包

import pandas as pd

数据准备

【空气质量硝酸盐数据】

air_quality_no2_long.csv N O 2 NO_2 NO2 分别位于巴黎、安特卫普和伦敦的 FR04014、BETR801 和伦敦威斯敏斯特测量站的值。

air_quality_no2 = pd.read_csv("air_quality_no2_long.csv", parse_dates=True)
air_quality_no2 = air_quality_no2[["date.utc", "location", "parameter", "value"]]
air_quality_no2.head()
date.utclocationparametervalue
02019-06-21 00:00:00+00:00FR04014no220.0
12019-06-20 23:00:00+00:00FR04014no221.8
22019-06-20 22:00:00+00:00FR04014no226.5
32019-06-20 21:00:00+00:00FR04014no224.9
42019-06-20 20:00:00+00:00FR04014no221.4

【空气质量颗粒物数据】

air_quality_pm25_long.csv P M 2.5 PM_{2.5} PM2.5 分别位于巴黎、安特卫普和伦敦的 FR04014、BETR801 和伦敦威斯敏斯特测量站的值。

air_quality_pm25 = pd.read_csv("air_quality_pm25_long.csv")
air_quality_pm25 = air_quality_pm25[["date.utc", "location", "parameter", "value"]]
air_quality_pm25.head()
date.utclocationparametervalue
02019-06-18 06:00:00+00:00BETR801pm2518.0
12019-06-17 08:00:00+00:00BETR801pm256.5
22019-06-17 07:00:00+00:00BETR801pm2518.5
32019-06-17 06:00:00+00:00BETR801pm2516.0
42019-06-17 05:00:00+00:00BETR801pm257.5

【1】连接对象

在这里插入图片描述

我想结合测量值 N O 2 NO_2 NO2 P M 2.5 PM_{2.5} PM2.5 ,两个结构相似的表,位于一个表中。

air_quality = pd.concat([air_quality_pm25, air_quality_no2], axis=0)
air_quality.head()
date.utclocationparametervalue
02019-06-18 06:00:00+00:00BETR801pm2518.0
12019-06-17 08:00:00+00:00BETR801pm256.5
22019-06-17 07:00:00+00:00BETR801pm2518.5
32019-06-17 06:00:00+00:00BETR801pm2516.0
42019-06-17 05:00:00+00:00BETR801pm257.5

concat() 函数沿其中一个轴(逐行或按列)对多个表执行串联操作。

默认情况下,串联沿轴 0 进行,因此生成的表合并了输入表的行。让我们检查原始表和串联表的形状以验证操作:

print('Shape of the ``air_quality_pm25`` table: ', air_quality_pm25.shape)
Shape of the ``air_quality_pm25`` table:  (1110, 4)
print('Shape of the ``air_quality_no2`` table: ', air_quality_no2.shape)
Shape of the ``air_quality_no2`` table:  (2068, 4)
print('Shape of the resulting ``air_quality`` table: ', air_quality.shape)
Shape of the resulting ``air_quality`` table:  (3178, 4)

因此,生成的表有 3178 = 1110 + 2068 行。

【注意】axis 参数将返回许多可以沿轴应用的 pandas 方法。DataFrame有两个相应的轴:第一个轴垂直向下跨行(轴 0),第二个轴水平运行跨列(轴 1)。默认情况下,大多数操作(如串联或汇总统计信息)跨行(轴 0)应用,但也可以跨列应用。

根据日期时间信息对表进行排序还说明了两个表的组合,parameter列定义表的原点(表 air_quality_no2 中的 no2 或表 air_quality_pm25 中的 pm25):

air_quality = air_quality.sort_values("date.utc")
air_quality.head()
date.utclocationparametervalue
20672019-05-07 01:00:00+00:00London Westminsterno223.0
10032019-05-07 01:00:00+00:00FR04014no225.0
1002019-05-07 01:00:00+00:00BETR801pm2512.5
10982019-05-07 01:00:00+00:00BETR801no250.5
11092019-05-07 01:00:00+00:00London Westminsterpm258.0

在此特定示例中,数据提供的parameter列可确保可以标识每个原始表。情况并非总是如此。concat 函数使用 keys 参数提供了一个方便的解决方案,添加了额外的(分层)行索引。例如:

air_quality_ = pd.concat([air_quality_pm25, air_quality_no2], keys=["PM25", "NO2"])
air_quality_.head()
date.utclocationparametervalue
PM2502019-06-18 06:00:00+00:00BETR801pm2518.0
12019-06-17 08:00:00+00:00BETR801pm256.5
22019-06-17 07:00:00+00:00BETR801pm2518.5
32019-06-17 06:00:00+00:00BETR801pm2516.0
42019-06-17 05:00:00+00:00BETR801pm257.5

【2】使用通用标识符联接表

在这里插入图片描述

将台站元数据表提供的台站坐标添加到测量表中的相应行中。

stations_coord = pd.read_csv("air_quality_stations.csv")
stations_coord.head()
locationcoordinates.latitudecoordinates.longitude
0BELAL0151.236194.38522
1BELHB2351.170304.34100
2BELLD0151.109985.00486
3BELLD0251.120385.02155
4BELR83351.327664.36226

此示例中使用的电台(FR04014、BETR801 和伦敦威斯敏斯特)只是元数据表中登记的三个条目。我们只想将这三个坐标添加到测量表中,每个坐标都在air_quality表的相应行上。

air_quality.head()
date.utclocationparametervalue
20672019-05-07 01:00:00+00:00London Westminsterno223.0
10032019-05-07 01:00:00+00:00FR04014no225.0
1002019-05-07 01:00:00+00:00BETR801pm2512.5
10982019-05-07 01:00:00+00:00BETR801no250.5
11092019-05-07 01:00:00+00:00London Westminsterpm258.0
air_quality = pd.merge(air_quality, stations_coord, how="left", on="location")
air_quality.head()
date.utclocationparametervaluecoordinates.latitudecoordinates.longitude
02019-05-07 01:00:00+00:00London Westminsterno223.051.49467-0.13193
12019-05-07 01:00:00+00:00FR04014no225.048.837242.39390
22019-05-07 01:00:00+00:00FR04014no225.048.837222.39390
32019-05-07 01:00:00+00:00BETR801pm2512.551.209664.43182
42019-05-07 01:00:00+00:00BETR801no250.551.209664.43182

使用 merge() 函数,对于air_quality表中的每一行,将从air_quality_stations_coord表中添加相应的坐标。两个表具有共同的列位置,该location用作组合信息的键。通过选择left连接,只有air_quality(左)表中可用的位置,即FR04014,BETR801和伦敦威斯敏斯特,最终会出现在结果表中。merge函数支持多个联接选项,类似于数据库样式的操作。

将参数元数据表提供的参数的完整描述和名称添加到测量表中。

air_quality_parameters = pd.read_csv("air_quality_parameters.csv")
air_quality_parameters.head()
iddescriptionname
0bcBlack CarbonBC
1coCarbon MonoxideCO
2no2Nitrogen DioxideNO2
3o3OzoneO3
4pm10Particulate matter less than 10 micrometers in...PM10
air_quality = pd.merge(air_quality, air_quality_parameters, how="left", left_on="parameter", right_on="id")
air_quality.head()
date.utclocationparametervaluecoordinates.latitudecoordinates.longitudeiddescriptionname
02019-05-07 01:00:00+00:00London Westminsterno223.051.49467-0.13193no2Nitrogen DioxideNO2
12019-05-07 01:00:00+00:00FR04014no225.048.837242.39390no2Nitrogen DioxideNO2
22019-05-07 01:00:00+00:00FR04014no225.048.837222.39390no2Nitrogen DioxideNO2
32019-05-07 01:00:00+00:00BETR801pm2512.551.209664.43182pm25Particulate matter less than 2.5 micrometers i...PM2.5
42019-05-07 01:00:00+00:00BETR801no250.551.209664.43182no2Nitrogen DioxideNO2

与前面的示例相比,没有通用列名。但是,air_quality表中的parameter列和air_quality_parameters_name中的 id 列都以通用格式提供测量变量。left_on 和 right_on 参数(而不仅仅是 on)在两个表之间建立链接。

【小结】

可以使用 concat 函数按列和按行连接多个表。

对于类似数据库的表合并/连接,请使用merge

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

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

相关文章

Linux系统基础——文件子系统

title: Linux系统文件子系统 date: 2022-12-18 15:48:24 modify: 2022-12-18 16:48:43 author: wangjianfeng tags: 001-computer-technology, OS, Linux aliases: Linux系统文件子系统 特此说明: 刘超的趣谈linux操作系统是比较重要的参考资料,本文大部分内容和图…

腾讯云轻量应用服务器搭建LAMP 开发环境

LAMP(LinuxApacheMySQLPHP)是目前国际流行的 Web 应用框架,包括了 Linux 操作系统、Apache Web 服务器、MySQL/MariaDB 数据库和 PHP 编程语言环境以及相关组件支持。 说明 LAMP 应用镜像底层基于 CentOS 7.6 64位操作系统。 登录 轻量应用服…

做一个极简 UI 库之代码 lint

eslint, prettier, stylelint 的配置 这三个规则的配置思路:代码美化用 prettier,逻辑代码用 eslint 校验,样式代码用 stylelint 校验。有跟代码美化冲突的以 prettier 为主 为什么要用这么多呢,因为 eslint 不能解析样式代码&a…

数据结构---LRU算法

LRU算法哈希链表自己的JAVA实现LRU全称Least Recently Used,也就是 最近最少使用的意思,是一种内存管理算法,该算法最早应用于Linux操作系统。这个算法基于一种假设:长期不被使用的数据,在未来被用到的几率也不大。因此…

【LeetCode】1754. 构造字典序最大的合并字符串

构造字典序最大的合并字符串 题目描述 给你两个字符串 word1 和 word2 。你需要按下述方式构造一个新字符串 merge :如果 word1 或 word2 非空,选择 下面选项之一 继续操作: 如果 word1 非空,将 word1 中的第一个字符附加到 mer…

node.js+uni计算机毕设项目基于微信小程序校园生活管理LW(程序+小程序+LW)

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

基于形态学处理的不规则形状图像的几何参数统计,包括输出面积,周长,圆度,矩形度,伸长度

up目录 一、理论基础 二、核心程序 三、测试结果 一、理论基础 形态学是图像处理中应用最为广泛的技术之一,主要用于从图像中提取对表达和描绘区域形状有意义的图像分量,使后续的识别工作能够抓住目标对象最为本质的形状特征,如边界和连通…

C#语言实例源码系列-实现文件分割和合并

专栏分享点击跳转>Unity3D特效百例点击跳转>案例项目实战源码点击跳转>游戏脚本-辅助自动化点击跳转>Android控件全解手册 👉关于作者 众所周知,人生是一个漫长的流程,不断克服困难,不断反思前进的过程。在这个过程中…

腾讯云轻量应用服务器使用 WooCommerce 应用镜像搭建电商独立站

WooCommerce 是当前很受欢迎的电商独立站建站工具,具备开源、免费、使用简单且功能强大等特点,您可通过该镜像快速搭建基于 WordPress 的电商独立站。该镜像已预装 WordPress(包含 WooCommerce 插件)、Nginx、MariaDB、PHP 软件。…

数据结构之排序【直接选择排序和堆排序的实现及分析】内含动态演示图

文章目录引言:1.直接选择排序2.堆排序3.直接选择排序和堆排序的测试引言: 感觉今天更冷了,码字更加的不易,所以引言就简单的写一下啦!今天我们就来了解一下什么是直接选择排序和堆排序。 1.直接选择排序 时间复杂度…

RabbitMQ 第一天 基础 4 RabbitMQ 的工作模式 4.1 Work queues 工作队列模式

RabbitMQ 【黑马程序员RabbitMQ全套教程,rabbitmq消息中间件到实战】 文章目录RabbitMQ第一天 基础4 RabbitMQ 的工作模式4.1 Work queues 工作队列模式4.1.1 模式说明4.1.2 代码编写4.1.3 小结第一天 基础 4 RabbitMQ 的工作模式 4.1 Work queues 工作队列模式 …

ELK第四讲之【docker安装Logstash8.4.3、集成springboot】

docker安装elasticsearch8.4.3 docker安装kibana8.4.3 一、docker安装logstash8.4.3 官方地址 https://github.com/elastic/logstash/releases 1、拉取镜像 docker pull elastic/logstash:8.4.3 2、启动容器 docker run -it -d --name logstash -p 9600:9600 -p 5044:…

十六、Docker Compose容器编排第一篇

1、概述 Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。使用 Compose,您可以使用 YAML 文件来配置应用程序的服务。然后,使用一个命令,您可以从您的配置中创建并启动所有服务。 Compose 适用于所有环境:生产、暂存、…

node.js+uni计算机毕设项目高校自习室座位网上预约小程序(程序+小程序+LW)

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

获取淘宝价格区间l-r的商品a的详细信息(商品名等)

看了一眼,上次更新距今2个月,看起来我好咕咕啊(感叹),可是感觉这两个月也没闲着捏(比赛,cf,期末等等,幸亏期末考延期了,我这被期末作业都整死了快&#xff09…

SpringBoot+Vue项目艺术摄影预约系统设计与实现

文末获取源码 开发语言:Java 使用框架:spring boot 前端技术:JavaScript、Vue.js 、css3 开发工具:IDEA/MyEclipse/Eclipse、Visual Studio Code 数据库:MySQL 5.7/8.0 数据库管理工具:phpstudy/Navicat JD…

Python pandas有几千个库函数,你用过几个?(2)

上一篇链接: Python pandas有几千个库函数,你用过几个?(1)_Hann Yang的博客-CSDN博客 I~Q: Function10~25 Types[Function][9:25] [infer_freq, interval_range, isna, isnull, json_normalize, lreshap…

微信HOOK 协议接口 实战开发篇 1.登录

使用HOOK也有不短的时间,写的各类接口杂乱无章 于是便有了将所有接口重构,整理一下的想法 顺手将整理的要点作为日志记录下来 预计每类接口写一篇日志,本次使用的是2022.12.24,当前微信最新版3.8.1.26版 言归正传,开始…

【秋招总结】双非本小菜鸡的坎坷秋招之路(附面经)

前言 因为大环境的影响,今年秋招hc骤缩,导致竞争的激烈程度比往年高了不少。 在秋招的时候,经历过简历石沉大海的无奈,也体验过人家收割offer而自己却依旧0offer的焦虑,不过好在最终也拿到了还算满意的结果。 如今我…

python爬虫把数据保存到csv、mysql中

啧,放假几天游戏玩腻了,啥都不想干,突然想起来python这玩意,无聊就来玩玩 目录 先是保存csv里面 然后保存到mysql里 目标:起点 主要是拿到这几个数据 分析下网页 一个li对应一本小说,打开li看里面的东西 …