python数据分析之pandas数据合并

article/2025/10/6 1:10:44

🌷这一章节来介绍pandas中的DateFrame实现数据合并的操作,类似于SQL中的内连接、外连接的操作.

目录

  • 1. 合并数据的方式
  • 2. Merge合并方法
    • 2.1 连接
      • 2.1.1 直接用on连接
      • 2.1.2 采用left_on 和 right_on连接
      • 2.1.3 采用left_index 和 right_index连接
    • 2.2 合并数据
      • 2.2.1 多对一的数据合并
      • 2.2.1 多对多的数据合并
  • 3. concat合并数据
    • 3.1 纵向表合并
    • 3.1 横向表合并
  • 4. 参考资料

1. 合并数据的方式

DataFrame中合并数据主要有两种方式 :Merge 、Concat

2. Merge合并方法

首先介绍一下merge方法的参数

pandas.merge(right, #合并对象,dataframe或者series对象how="inner",#合并类型on= None,#连接键left_on = None,#左连接键right_on= None,left_index=False,right_index=False,sort=False,suffixes=("_x", "_y"),copy=True,indicator= False,validate = None
)

参数说明

  • right:合并对象,DataFrame 对象或 Series 对象。
  • how:合并类型,可以是左连接 left,右连接 right,外部连接 outer,内部连接 inner,类似于数据库的左、右、外、内连接。
  • on:标签、列表或者数组,默认为none,是指dataframe对象连接的列或索引列名称。
  • left_on: 标签、列表或数组,默认值为 None。要连接的左数据集的列或索引级名称:也可以是左数据集长度的数组或数组列表。
  • right_on: 标签、列表或数组,默认值为None。要连接的右数据集的列或索引级名称,也可以是右数据集长度的数组或数组列表。
  • left_index:布尔型,默认为False。使用左数据集的索引作为连接键。如果是多重索引,则其他数据中的键数(索引或列数)必须匹配索引级別数。
  • right_index: 布尔型,默认为False。使用右数据集的索引作为连接键。
  • sort:布尔型,默认为False,在合并结果中按字典顺序对连接键进行排序。如果为 False,连接键的顺序取决于连接类型how参数。
  • suffixes:元组类型,默认值为(_x,_y)。当左侧数据集和右侧数据集的列名相同时,数据合并后列名将带上“x”和“y”后级。
  • copy:是否复制数据,默认值为True,如果为False,则不复制数据。
  • indicator:布尔型或宇符串,默认值为False。如果值为True,则添加一个列以输出名为“Merge”的 Dataframe 対象,共中包合每一行信息。如果是字符串,将向輸出的 DataFrame 対象中添加包含每一行信息的列,并将列命名为字符型的值。
  • validate:字符串,检查合并数据是否为指定类型。

2.1 连接

2.1.1 直接用on连接

import pandas as pd
#解决数据输出时列名不对齐的问题
pd.set_option('display.unicode.east_asian_width', True)
df1 = pd.DataFrame({'编号':['mr001','mr002','mr003'],'语文':[110,105,109],'数学':[105,88,120],'英语':[99,115,130]})
print(df1)
df2 = pd.DataFrame({'编号':['mr002','mr001','mr003','mr004'],'体育':[34.5,39.7,38,45]})
print(df2)
df_merge=pd.merge(df1,df2,on='编号')
print(df_merge)

用on的时候需要注意两个df表的关联键名称需要一样,这里df1 和 df2 关联键是‘编号’(过程中可使用how来控制是左、右、内、外连接)

结果如下:
在这里插入图片描述

2.1.2 采用left_on 和 right_on连接

import pandas as pd
#解决数据输出时列名不对齐的问题
pd.set_option('display.unicode.east_asian_width', True)
df1 = pd.DataFrame({'编号01':['mr001','mr002','mr003'],'语文':[110,105,109],'数学':[105,88,120],'英语':[99,115,130]})
print(df1)
df2 = pd.DataFrame({'编号02':['mr002','mr001','mr003','mr004'],'体育':[34.5,39.7,38,45]})
print(df2)
df_merge=pd.merge(df1,df2,left_on='编号01',right_on='编号02')
print(df_merge)

当关联键不同时,可以用left_on和 right_on的时候,需要两者同时出现,说明左右表的连接键。(过程中可使用how来控制是左、右、内、外连接)

结果如下:
在这里插入图片描述

2.1.3 采用left_index 和 right_index连接

import pandas
import pandas as pd
#解决数据输出时列名不对齐的问题
pd.set_option('display.unicode.east_asian_width', True)
df1 = pd.DataFrame({'编号01':['mr001','mr002','mr003'],'语文':[110,105,109],'数学':[105,88,120],'英语':[99,115,130]})
print(df1)
df2 = pd.DataFrame({'编号02':['mr002','mr001','mr003','mr004'],'体育':[34.5,39.7,38,45]})
print(df2)
df_merge=pd.merge(df1,df2,how='outer',left_index=True,right_index=True)
print(df_merge)

使用left_index 和 right_index连接是指使用两张表的索引进行连接,当然需要两者同时出现。(过程中可使用how来控制是左、右、内、外连接)

结果如下:这里采用的外连接,大家可以看见连接的结果是对不上的。
在这里插入图片描述

2.2 合并数据

这一章节主要是通过how来控制合并数据,这一章节单独介绍是因为有些同学可能没有接触过SQL的左、右、内、外连接的数据合并方式,这里单独介绍一下。

2.2.1 多对一的数据合并

主要是通过连接键来控制数据合并的形式

import pandas as pd
#解决数据输出时列名不对齐的问题
pd.set_option('display.unicode.east_asian_width', True)
df1 = pd.DataFrame({'编号':['mr001','mr002','mr003'],'学生姓名':['明日同学','高猿员','钱多多']})
print(df1)
df2 = pd.DataFrame({'编号':['mr001','mr001','mr003'],'语文':[110,105,109],'数学':[105,88,120],'英语':[99,115,130],'时间':['1月','2月','1月']})
print(df2)
df_merge=pd.merge(df1,df2,on='编号')
print(df_merge)

这里的数据中,mr001的同学有2个成绩,我们需要一对多地展示2行数据。

结果如下:
在这里插入图片描述

2.2.1 多对多的数据合并

主要是指两个数据集中的列数据不是一对一的关系,是多对多的关系,这个时候我们需要将他们都连接起来一起展示。

import pandas as pd
#解决数据输出时列名不对齐的问题
pd.set_option('display.unicode.east_asian_width', True)
df1 = pd.DataFrame({'编号':['mr001','mr002','mr003','mr001','mr001'],'体育':[34.5,39.7,38,33,35]})
print(df1)
df2 = pd.DataFrame({'编号':['mr001','mr002','mr003','mr003','mr003'],'语文':[110,105,109,110,108],'数学':[105,88,120,123,119],'英语':[99,115,130,109,128]})
print(df2)
df_merge=pd.merge(df1,df2,on='编号')
print(df_merge)

这里两个数据表中的数据都是多对多的关系,这里将他们一一匹配出来。

结果如下:
在这里插入图片描述

3. concat合并数据

介绍一下concat参数

pandas.concat(objs,axis=0,join="outer",ignore_index:False,keys=None,levels=None,names=None,verify_integrity: False,sort: False,copy: True
)

参数说明

  • objs:series、 dataframe 或Panel 对象的序列或映射。如果传递一个字典,则排序的键将用作键参数。
  • axis : 拼接的方式,axis=1表示行,axis=0 表示列,默认值为0
  • join :值为inner(交集)或outer(联合),处理其他轴上的索引方式。默认值为 outer。
  • ignore_index:布尔值,默认值为False。需要保留索引时,索引值为0,⋯,n-1;如果为True,则忽略索引。
  • keys:序列,默认值无。使用传递的键作为最外层构建层次索引。如果为多索引,应该使用元组。
  • levels:序列列表,默认值无。用于构建 Multiindex 参数的特定级別(唯一值)。否则,它们将从键推断。
  • names: list 列表,默认值为None,结果层次索引中的级别的名称。
  • verity_ integrity :布尔值,默认值为False。检查新连接的轴是否包含重复项。
  • sort :布尔值,默认值为True(在1.0.0以后版本默认值为False,即不排序)。如果连接为外连接时 Cjoin-outer),则对未对齐的非连接轴进行排序;如果连接为内连接时 (join=inner),该参数不起作用。
  • copy:是否复制数据,默认值为True;如果为False,则不复制数据。

3.1 纵向表合并

import pandas as pd
#解决数据输出时列名不对齐的问题
pd.set_option('display.unicode.east_asian_width', True)
df1 = pd.DataFrame({'编号':['mr001','mr002','mr003'],'体育':[34.5,39.7,38]})
print(df1)
df2 = pd.DataFrame({'编号':['mr001','mr002','mr003'],'语文':[110,105,109],'数学':[105,88,120],'英语':[99,115,130]})
print(df2)
df_concat=pd.concat([df1,df2],axis=0)
print(df_concat)

将俩个数据集纵向进行合并,结果如下:
在这里插入图片描述

3.1 横向表合并

import pandas as pd
#解决数据输出时列名不对齐的问题
pd.set_option('display.unicode.east_asian_width', True)
df1 = pd.DataFrame({'编号':['mr001','mr002','mr003'],'体育':[34.5,39.7,38]})
print(df1)
df2 = pd.DataFrame({'编号':['mr001','mr002','mr003'],'语文':[110,105,109],'数学':[105,88,120],'英语':[99,115,130]})
print(df2)
df_concat=pd.concat([df1,df2],axis=1)
print(df_concat)

通过控制axis来控制表的横向和纵向连接
在这里插入图片描述
总的来说,concat多用于长度相同的数据集进行横向连接。

4. 参考资料

《python数据分析从入门到实践》


http://chatgpt.dhexx.cn/article/qO0uT5oU.shtml

相关文章

Pandas数据合并与拼接的5种方法

pandas实现数据的合并与拼接 目录 一、DataFrame.concat:沿着一条轴,将多个对象堆叠到一起 二、DataFrame.merge:类似 vlookup 三、DataFrame.join:主要用于索引上的合并 四、Series.append:纵向追加Series 五、…

Pandas 数据处理 | 多个数据表怎么合并(merge),你了解么?

Pands 两个数据列表合并方法总结; merge() 函数用于合并两个 DataFrame 对象或 Series,数据处理时经常会用到这个函数,官网给出该函数的定义如下: pandas.merge(left, right, how: str ‘inner’, onNone, left_onNone, right_…

[Pandas] 数据合并 pd.merge

实现类似SQL的join操作,通过pd.merge()方法可以自由灵活地操作各种逻辑的数据连接、合并等操作 可以将两个DataFrame或Series合并,最终返回一个合并后的DataFrame 语法 pd.merge(left, right, how inner, on None, left_on None, right_on None,l…

6.1 多数据源合并

1.案例介绍 通过Kettle工具将A公司和B公司的手机日销售数据合并到一个数据源(数据表company)中,也就是对文件company_a.csv和数据表company_b中的数据进行合并操作,并输出到数据表company中。 2.数据准备 假设,某公…

数据合并之concat、append、merge和join

Pandas 是一套用于 Python 的快速、高效的数据分析工具。它可以用于数据挖掘和数据分析,同时也提供数据清洗功能。本文将详细讲解数据合并与连接,目录如下: ① concat 一.定义 concat函数可以在两个维度上对数据进行拼接,默认纵向…

这些数据合并的神操作,你掌握几个?

导读:在数据分析过程中,有时候需要将不同的数据文件进行合并处理。本文主要介绍三种数据合并方法。 Pandas提供了多功能、高性能的内存连接操作,本质上类似于SQL等关系数据库,比如,merge、join、concat等方法可以方便地…

6、数据的合并

目录 一、添加变量即横向合并。 二、添加个案即纵向合并 在实际工作中,为了提高效率,经常需要将一份数据分成几部分分别录入,或为了便于分析,又将几个数据文件合并成一个总的数据文件。为此,SPSS提供了两种合并数据文…

【数据科学】05 数据合并(merge、concat、combine)与数据清洗(缺失值、重复值、内容和格式)

文章目录 1. 数据合并1.1 merge()合并1.2 concat()合并1.3 combine()合并 2. 数据清洗2.1 缺失值2.2 重复值2.3 内容与格式清洗 1. 数据合并 实际应用中,需要分析的数据可能来自不同的数据集,因此在开始数据分析之前,需要先将不同的数据集合…

Gradle 入门

1、Gradle 入门 1.1 Gradle 简介 Gradle 是一款 Google 推出的基于JVM、通用灵活的项目构建工具,支持 Maven,JCenter 多种第三方仓库;支持传递性 依赖管理、废弃了繁杂的 xml 文件,转而使用简洁的、支持多种语言(例如:java、gro…

Gradle【扫盲】之简易使用教程

官网地址 https://gradle.org/版本选择 如果使用的是idea,可以在idea的plug目录下查看支持的gradle的版本: 进入目录: 那我们到官网下载对应版本的gradle即可 Gradle下载及配置 进入官网,查看发行版本 选择对应的安装包 b…

Linux 安装gradle完整教程

Linux 安装gradle 1.下载gradle https://gradle.org/install/ 选择版本下载 点击下载 也可以在这里下载历史版本 https://services.gradle.org/distributions/ 2.将包上传到服务器,我这里下载的包是6.7的你们可以下载各自需要的版本 zip包解压 unzip gradle-8.…

gradle快速入门

1.Gradle 入门 1.1 Gradle 简介 Gradle 是一款Google 推出的基于JVM、通用灵活的项目构建工具,支持Maven,JCenter 多种第三方仓库;支持传递性依赖管理、废弃了繁杂的xml 文件,转而使用简洁的、支持多种语言(例如:java、groovy 等…

Gradle下载安装教程

前言 1.gradle和maven一样都是用来构建java程序的,maven2004年开始兴起,gradle2012年开始诞生,既然已经有了maven这么成熟的构建工具为什么还有gradle的诞生呢,因为gradle有很多地方比maven做的更好,例如gradle采用gro…

Gradle 15分钟入门教程

1-Gradle入门介绍 在阅读或实践本文中的实例前,必须首先确保已将Gradle插件安装到Eclipse中。如果没有,可以点击下面的链接查看Gradle安装说明: - http://www.yiibai.com/gradle/how-install-gradle-windows.html 本教程的目标: …

gradle安装与入门

1. Gradle安装(本地也可不安装,不安装gradle配置选择gradle wrapper) 下载地址:http://services.gradle.org/distributions/ 下载你所需要对应的版本,gradle-4.6.1-bin.zip 下载后解压到你想要的目录 设置环境变量 新建系统变量&…

Android—Gradle教程(一)

前言 在前几篇中,讲解了Groovy的基础语法,学习新语法过程总是枯燥的,但为了更好的掌握Gradle,那就必须经过该过程。当然从这一篇将会从零基础开始,开展对Gradle的讲解。 1. 掌握Gradle基础 1.1 环境配置 去官网下载…

Gradle使用教程

前言 相信使用Java的同学都用过Maven,这是一个非常经典好用的项目构建工具。但是如果你经常使用Maven,可能会发现Maven有一些地方用的让人不太舒服: Maven的配置文件是XML格式的,假如你的项目依赖的包比较多,那么XML文…

gradle入门简介以及安装

一、简介 java作为一门世界级主流编程语言,有一款高效易用的项目自动化构建工具是java开发者共同追求的心愿和目标。先是2000年Ant,后有2004年Maven两个工具的诞生,都在java市场上取得了巨大的成功。但是二者都有一定的不足和局限性。 2012年…

【构建工具】Gradle中文教程

文章目录 Gradle 简介Gradle 概述基于声明的构建和基于约定的构建为以依赖为基础的编程方式提供语言支持构建结构化深度 APIGradle 的扩展多项目构建多种方式管理依赖Gradle 是第一个构建集成工具易于移植GroovyThe Gradle wrapper自由和开源 为什么使用 Groovy? Gradle 安装先…

Gradle 入门教程(一):Gradle是什么

这是一篇Gradle的入门教程 一、 Gradle是什么 1.1 构建工具 要解释Gradle是什么,首先要搞清楚一个名词——构建工具(Build Tool)。 构建工具,顾名思义就是用于构建(Build)的工具,构建包括编…