Pandas怎样实现DataFrame的合并

一、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:要merge的dataframe或者有name的Series
how:join类型,'left', 'right', 'outer', 'inner'
on:join的key,left和right都需要有这个key
left_on:left的df或者series的key
right_on:right的df或者seires的key
left_index,right_index:使用index而不是普通的column做join
suffixes:两个元素的后缀,如果列有重名,自动添加后缀,默认是('_x', '_y')

二、以关键列来合并两个dataframe

可以看到只有left和right的key1=y的行保留了下来,即默认合并后只保留有共同列项并且值相等行(即交集)。
本例中left和right的k1=y分别有2个,最终构成了2*2=4行
import pandas as pd
left = pd.DataFrame({'A': ['a0', 'a1', 'a2', 'a3'],
                     'B': ['b0', 'b1', 'b2', 'b3'],
                     'k1': ['x', 'x', 'y', 'y']})
right = pd.DataFrame({'C': ['c1', 'c2', 'c3', 'c4'],
                      'D': ['d1', 'd2', 'd3', 'd4'],
                      'k1': ['y', 'y', 'z', 'z']})

left

Pandas怎样实现DataFrame的合并
right
Pandas怎样实现DataFrame的合并
pd.merge(left, right, on=’k1′)

Pandas怎样实现DataFrame的合并

三、理解merge时数量的对齐关系

one-to-one:一对一关系,关联的key都是唯一的
    比如(学号,姓名) merge (学号,年龄)
    结果条数为:1*1
one-to-many:一对多关系,左边唯一key,右边不唯一key
    比如(学号,姓名) merge (学号,[语文成绩、数学成绩、英语成绩])
    结果条数为:1*N
many-to-many:多对多关系,左边右边都不是唯一的
    比如(学号,[语文成绩、数学成绩、英语成绩]) merge (学号,[篮球、足球、乒乓球])
    结果条数为:M*N
1、one-to-one 一对一关系的merge
left = pd.DataFrame({'sno': [11, 12, 13, 14],
                      'name': ['name_a', 'name_b', 'name_c', 'name_d']
                    })
right = pd.DataFrame({'sno': [11, 12, 13, 14],
                      'age': ['21', '22', '23', '24']
                    })

left

Pandas怎样实现DataFrame的合并
right
Pandas怎样实现DataFrame的合并
一对一关系,结果中有4条
pd.merge(left, right, on='sno')

Pandas怎样实现DataFrame的合并
2、one-to-many 一对多关系的merge
注意:数据会被复制
left = pd.DataFrame({'sno': [11, 12, 13, 14],
                      'name': ['name_a', 'name_b', 'name_c', 'name_d']
                    })
right = pd.DataFrame({'sno': [11, 11, 11, 12, 12, 13],
                       'grade': ['语文88', '数学90', '英语75','语文66', '数学55', '英语29']
                     })

left

Pandas怎样实现DataFrame的合并
right
Pandas怎样实现DataFrame的合并
数目以多的一边为准
pd.merge(left, right, on='sno')

Pandas怎样实现DataFrame的合并
3、many-to-many 多对多关系的merge
注意:结果数量会出现乘法
left = pd.DataFrame({'sno': [11, 11, 12, 12,12],
                      '爱好': ['篮球', '羽毛球', '乒乓球', '篮球', "足球"]
                    })
right = pd.DataFrame({'sno': [11, 11, 11, 12, 12, 13],
                       'grade': ['语文88', '数学90', '英语75','语文66', '数学55', '英语29']
                     })

left

Pandas怎样实现DataFrame的合并
right
Pandas怎样实现DataFrame的合并
pd.merge(left, right, on=’sno’)
Pandas怎样实现DataFrame的合并

四、理解left join、right join、inner join、outer join的区别

left = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'],
                      'A': ['A0', 'A1', 'A2', 'A3'],
                      'B': ['B0', 'B1', 'B2', 'B3']})

right = pd.DataFrame({'key': ['K0', 'K1', 'K4', 'K5'],
                      'C': ['C0', 'C1', 'C4', 'C5'],
                      'D': ['D0', 'D1', 'D4', 'D5']})

left

Pandas怎样实现DataFrame的合并
right
Pandas怎样实现DataFrame的合并
1、inner join,默认
左边和右边的key都有,才会出现在结果里
pd.merge(left, right, how='inner')

Pandas怎样实现DataFrame的合并
2、left join
左边的都会出现在结果里,右边的如果无法匹配则为Null
pd.merge(left, right, how='left')

Pandas怎样实现DataFrame的合并
3、 right join
右边的都会出现在结果里,左边的如果无法匹配则为Null
pd.merge(left, right, how='right')

Pandas怎样实现DataFrame的合并
4、 outer join
左边、右边的都会出现在结果里,如果无法匹配则为Null
pd.merge(left, right, how='outer')

Pandas怎样实现DataFrame的合并

五、如果出现非Key的字段重名怎么办

left = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'],
                      'A': ['A0', 'A1', 'A2', 'A3'],
                      'B': ['B0', 'B1', 'B2', 'B3']})

right = pd.DataFrame({'key': ['K0', 'K1', 'K4', 'K5'],
                      'A': ['A10', 'A11', 'A12', 'A13'],
                      'D': ['D0', 'D1', 'D4', 'D5']})

left

Pandas怎样实现DataFrame的合并
right
Pandas怎样实现DataFrame的合并
pd.merge(left, right, on='key')

Pandas怎样实现DataFrame的合并
pd.merge(left, right, on='key', suffixes=('_left', '_right'))

Pandas怎样实现DataFrame的合并

Original: https://blog.csdn.net/weixin_47661174/article/details/124697842
Author: 笑 瘾
Title: Pandas怎样实现DataFrame的合并

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/750695/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • matplotlib之pyplot模块–python绘图

    文章目录 matplotlib之pyplot模块–python绘图 * 导入包 坐标轴 图标 matplotlib之pyplot模块–python绘图 导入包 impo…

    Python 2023年9月1日
    069
  • manim 设置图层前后关系

    默认情况下,后加入的图形在上方。在带有png的动画中,常常希望将后加入的图形放在png的后方,可以使用set_z_index()方法 例如: b.set_z_index(-1) s…

    Python 2023年6月12日
    077
  • “WebDriver“ object has no attribute “find_element_by_css_selector“

    今天用selenium写爬虫, 想用selector查找元素定位的时候报了这样的错误,如图: 解决办法 方法一:查看我的selenium的版本是最新的。把降版本降到 3.141.0…

    Python 2023年8月1日
    056
  • Python 3 实现色情图片识别

    Python 3 实现色情图片识别 项目简介 项目内容 本实验将使用 Python3 去识别图片是否为色情图片,我们会使用到 PIL 这个图片处理库,会编写算法来划分图像的皮肤区域…

    Python 2023年5月25日
    069
  • sql serve数据库基础入门(2)

    ; 前言 🎈个人主页:🎈 :✨✨✨初阶牛✨✨✨🐻推荐专栏: 🍔🍟🌯 c语言初阶🔑个人信条: 🌵知行合一🍉本篇简介:>:在上一篇的最后,牛牛介绍了怎么创建表,本篇牛牛介绍如何管…

    Python 2023年10月9日
    045
  • Apache DolphinScheduler 简单任务定义及复杂的跨节点传参

    ​ 点亮 ⭐️ Star · 照亮开源之路 GitHub:https://github.com/apache/dolphinscheduler Apache DolphinSche…

    Python 2023年10月23日
    043
  • 10分钟教你写一个数据库

    今天教大家借助一款框架快速实现一个数据库,这个框架就是 Calcite,下面会带大家通过两个例子快速教会大家怎么实现,一个是可以通过 SQL 语句的方式可以直接查询文件内容,第二个…

    Python 2023年10月19日
    039
  • pandas合并dataframe

    本文不使用”列”,”行”这样的方式描述合并。为了更加形象,采用”左右”,”上下”这样…

    Python 2023年8月22日
    045
  • 网络爬虫框架——Scrapy框架解析

    一.为什么使用Scrapy框架? Scrapy是一个快速、高层次的屏幕抓取和web抓取的框架,可用于数据挖掘、监测和自动化检测,任何人都可以根据需要去进行修改。 二.Scrapy框…

    Python 2023年10月1日
    053
  • Python太烂了!

    原因1:版本之间不兼容 安装Linux后,那么它很可能默认会安装多个版本的Python,可能有Python2和Python3,甚至更多零零碎碎的版本,如3.5或3.7。 这是有原因…

    Python 2023年11月5日
    039
  • spyder 绘图设置_仅为保存的绘图更改Spyder和Matplotlib图形大小

    正如@ImportanceOfBeingErnest建议的那样,在保存后更改图形大小应该是可行的,并且可能会解决您的问题。在 但是,根据您的具体问题,您可能会面临缩放问题,因为保存…

    Python 2023年9月5日
    061
  • 最近opencv又报了啥错(一)

    前言 别骂了别骂了,太久没打python,手贼生,最近在搞opencv和一些ocr,报了一堆错,有些是python的原生错误,有的是opencv的,有的是我nt,就全部记录一下吧 …

    Python 2023年9月16日
    057
  • 写好 Python 代码的重要技巧

    Original: https://www.cnblogs.com/123456feng/p/16081681.htmlAuthor: 蚂蚁ailingTitle: 写好 Pyth…

    Python 2023年5月24日
    057
  • Pytest-html生成独立的报告以及Python打印日志

    大家好,我是杨叔。每天进步一点点,关注我的微信公众号【程序员杨叔】,获取更多测试开发技术知识! 一、Pytest-html生成独立的报告 背景: 使用pytest运行case后,需…

    Python 2023年9月9日
    065
  • python midi_python使用PyGame播放Midi和Mp3文件的方法

    ”’ pg_midi_sound101.py play midi music files (also mp3 files) using pygame tes…

    Python 2023年9月24日
    034
  • Flask 框架学习_1

    Flask 框架学习_1 Flask 框架 与 Django框架区别 Flask: 小巧、灵活,让程序员自己决定定制哪些功能,非常适用于小型网站。 对于普通的工人来说将毛坯房装修为…

    Python 2023年8月15日
    047
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球