首页 > 其他分享 >【Pandas总结】第八节 Pandas 合并数据集_pd.merge()

【Pandas总结】第八节 Pandas 合并数据集_pd.merge()

时间:2022-10-16 21:33:53浏览次数:44  
标签:right name df merge pd Pandas best left

写在前面

这一节非常的重要,因为Pandas中的数据集合并,最常用的方法就是 merge, 如果大家对数据库熟悉的话,那么会觉得 merge 非常容易理解,因为这个的使用和数据库的合并几乎完全一样。稍微有一点点难点的,应该就是对合并方式的理解,即:innerouterleftright 这四种合并方式的理解,下面我们来一起看 pd.merge()的使用方法吧;

pd.merge()的使用方法

语法格式:

pd.merge(left, right, how = ‘inner’, on = None, left_on = None, right_on = None, left_index = False, right_index = False, sort = True, suffixes = (‘_x’,’_y’), copy = True, indicator = False, validate = None)

参数 解释
left、right 需要连接的两个DataFrame或Series,一左一右 。重要参数!
how 两个数据连接方式,默认为inner,可设置inner、outer、left或right 。重要参数!
on 作为连接键的字段,当左右两个表的列名相同时使用。如果不相同,需要用left_on和right_on来分别指定。重要参数!
left_on 左表的连接键字段 。 重要参数!
right_on 右表的连接键字段。重要参数!
left_index 为True时将左表的索引作为连接键,默认为False
right_index 为True时将右表的索引作为连接键,默认为False
suffixes 如果左右数据出现重复列,新数据表头会用此后缀进行区分,默认为_x和_y
sort 排序
indicator 标注数据来源,即:left_only, right_only, both

参数很多,但其实最重要的只有两个参数,即:how, on; 其余参数只要了解就好;

一、数据准备

需要使用两张表,表数据如下,可以复制到本地进行练习;

表一:name_list

Name,from,Year
塞尔达传说,任天堂,2017
只羊,FS,2019
战神,Sony,2018
王者荣耀,Tencent,2015

在这里插入图片描述

表二:best_list

Name,最佳游戏
塞尔达传说,是
战神,是
王者荣耀,否
双人成形,是

在这里插入图片描述

读入数据:

import pandas  as pd
path_1 = r"./name_list.csv"
path_2 = r"./best_game.csv"

df_name = pd.read_csv(path_1)
df_best = pd.read_csv(path_2)

二、参数leftright

pd.merge()只能用于两个表的拼接,而且通过参数名称也能看出连接方向是左右拼接,一个左表一个右表,不可以用作上下的拼接

这里的两个参数传入后,如果有公共的列名,则可以直接Merge, 举例如下:从例子中我们可以看到,默认的参数如下:on="Name", how="Inner";

import pandas  as pd
path_1 = r"./name_list.csv"
path_2 = r"./best_game.csv"
df_name = pd.read_csv(path_1)
df_best = pd.read_csv(path_2)
df3 =pd.merge(df_name,df_best)
# 等价于
df3 =pd.merge(left = df_name,right = df_best, on="Name",how="inner")

在这里插入图片描述

三、参数 on

参数on 用来指定用那些列来进行拼接,如果不特别不指定,则,相同信息的列都会作为拼接依据; 故一般情况下,还是推荐用on将列指定,避免后续的bug;

当两个表需要拼接的列,列名相同时,直接用on=列名,即可; 若两个表需要拼接的列,列名不同时,需要使用参数:left_onright_on,举例如下:

列名相同:

df3 =pd.merge(left = df_name,right = df_best, on="Name")

在这里插入图片描述

列名不同:

df_best.columns = ['Game_name','最佳游戏']  #修改列名
df3 =pd.merge(left = df_name,right = df_best, left_on="Name",right_on="Game_name")

在这里插入图片描述

四、参数 leftindexrightindex

可以用Index作为合并列,在有工号,身份证号等这样的不重复信息时,可以大大提高运算的速度,举例如下:

pd.merge(df_name_index,df_best_index,left_index=True,right_index=True)

全部代码如下:

import pandas  as pd
path_1 = r"./name_list.csv"
path_2 = r"./best_game.csv"

df_name = pd.read_csv(path_1)
df_best = pd.read_csv(path_2)
df_name_index = df_name.set_index(["Name"])

df_best.columns = ['Game_name','最佳游戏']  #修改列名
df_best_index = df_best.set_index("Game_name")

df_index = pd.merge(df_name_index,df_best_index,left_index=True,right_index=True)

在这里插入图片描述

五、参数how

参数 how 是 Merge函数中最重要的参数,how 有四个可以传入的值,即: inner、outer、left或right ,分别解释如下:

参数 图示(红圈演示,虽然不太对,但是好理解) 说明 举例
left 在这里插入图片描述 左连接 ;返回包括左表中的所有记录和右表中连接字段相等的记录 在这里插入图片描述
right 在这里插入图片描述 右连接; 返回包括右表中的所有记录和左表中连接字段相等的记录; 在这里插入图片描述
inner 在这里插入图片描述 内连接; 只返回两个表中连接字段相等的行; 在这里插入图片描述
outer 在这里插入图片描述 外连接;返回左右表中所有的记录和左右表中连接字段相等的记录; 在这里插入图片描述

代码如下:

import pandas  as pd
path_1 = r"./name_list.csv"
path_2 = r"./best_game.csv"

df_name = pd.read_csv(path_1)
df_best = pd.read_csv(path_2)

df = pd.merge(df_name,df_best,on ="Name",how="inner")
df = pd.merge(df_name,df_best,on ="Name",how="outer")
df = pd.merge(df_name,df_best,on ="Name",how="left")
df = pd.merge(df_name,df_best,on ="Name",how="right")

六、参数indicator

默认是False不显示数据来源,把参数设置为True就可以了。举一个例子大家就明白了; 如下面的例子,both代表数据来源于两个表,left_only 代表数据来源于左表, right_only 代表数据来源于右边。

pd.merge(df_name,df_best,on ="Name",how="outer",indicator=True)

在这里插入图片描述

七、参数suffixes

参数suffixes可以将原来数据集中相同的列名进行标注(出去on后面指定的列),默认为 x和y; 举一个例子大家就明白了; 为了两个表有相同的列,我们将原始数据修改如下:

左表:

Name,from,Year
塞尔达传说,任天堂,2017
只羊,FS,2019
战神,Sony,2018
王者荣耀,Tencent,2015

右表:

Name,最佳游戏,Year
塞尔达传说,是,2017
战神,是,2018
王者荣耀,否,2015
双人成形,是,2021

代码:

import pandas  as pd
path_1 = r"./name_list.csv"
path_2 = r"./best_game.csv"

df_name = pd.read_csv(path_1)
df_best = pd.read_csv(path_2)
df = pd.merge(df_name,df_best,on ="Name",how="outer",suffixes=("_left","_right"))

在这里插入图片描述

写在后面

上面写了挺多参数,但实际上大家只要会使用 on, how 就够了,不用浪费太多的时间去研究每一个参数,需要使用的时候再来查就好啦~ 因为现在研究了,长时间不用,也会忘记的~

标签:right,name,df,merge,pd,Pandas,best,left
From: https://blog.51cto.com/u_15807450/5760546

相关文章

  • 548JDBC练习_update、DDL语句和549JDBC各个类详解_ResultSet_基本使用
    JDBC练习_update and DDL语句//删除数据库内容语句//导入jar包publicstaticvoidmain(String[]args){Connectionconn=null;S......
  • Visual studio2017的Settings文件夹,隐藏文件夹appdata
    Settings文件夹(工具——>导入和导出设置——>导入选定的环境设置——>下一步)即可看到自己的Settings文件夹位置。有时候无法查看隐藏文件夹,比如appdata,此时需要手动打开......
  • 解决Vue打印带有echarts的pdf问题
    智能中医项目中开发一个打印报告,报告里有患者的基本信息、病况和echarts展示的一些图表,解决了一下午终于解决。彩色打印效果如下:总体效果还是不错,汇总一下处理方法。修......
  • spdlog库笔记 (二):编译、安装
    目录安装编译、运行平台编译、安装直接拷贝include文件到用户的项目Windows下编译使用spdlogWindows下使用spdlog参考安装编译、运行平台Linux,FreeBSD,OpenBSD,Solaris,AI......
  • spdlog库笔记 (一):简介
    目录简介资源简介spdlog是一个非常快、基于头文件编译的、跨多平台的C++日志库。特点:运行非常快基于.h头文件(很奇怪是不是)实现不依赖第三方库(不太严格,只是不需......
  • 【Pandas总结】第七节 Pandas 合并数据集_pd.concat()
    将不同的数据源合并在一起是数据处理中最有趣的事情之一,在pandas中进行数据的合并,既可以使用pd.concat进行简单的数据合并,也可以使用pd.merge,pd.join进行复杂的合并;本节......
  • 饮冰三年-人工智能-Pandas-80-Pandas 数据扩增
    上一篇:饮冰三年-人工智能-Pandas-78-Pandas新增、统计、排序 数据准备可参考:饮冰三年-人工智能-Django淘宝拾遗-75-数据准备一、索引索引(index)是Pandas的重要工具,通......
  • 网络抓包工具tcpdump
    ####监控系统状态#抓包工具tcpdump,一般主要看数据的流向,也要关注length长度,有时候会看到一些比较奇怪的数据包,默认很多都是tcp的,有时候会遇到一些udp的包,那么很有可能是被......
  • iframe 在线预览pdf、word、excel、ppt、txt、图片、视频
    第一种方式通过iframe在线预览pdf,word,excel,ppt,txt,图片,视频<template><el-button@click="openHandler">预览</el-button><el-dialog@close="closeHa......
  • Python库-pandas详解
    1.pandas介绍 pandas是用于数据挖掘的Python库 便捷的数据处理能力独特的数据结构读取文件方便封装了matplotlib的画图和numpy的计算pandas的数据结构Ser......