# All default
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,
)
import pandas as pd
#当只加两个dataframe参数,其余参数都为默认的时候,两个dataframe必须要有至少一个相同的两列,否则会报错
#一个相同的key
data1 = pd.DataFrame({"key1": ["K0", "K1", "K2", "K3"],"A": ["A0", "A1", "A2", "A3"],"B": ["B0", "B1", "B2", "B3"],}
)
data2 = pd.DataFrame({"key1": ["K0", "K1", "K2", "K3"],"C": ["C0", "C1", "C2", "C3"],"D": ["D0", "D1", "D2", "D3"],}
)
mergeData = pd.merge(data1,data2)

#两个相同的key
data3 = pd.DataFrame({"key1": ["K0", "K1", "K2", "K3"],"key2": ["K4", "K5", "K6", "K7"],"A": ["A0", "A1", "A2", "A3"],"B": ["B0", "B1", "B2", "B3"],}
)
data4 = pd.DataFrame({"key1": ["K0", "K1", "K2", "K3"],"key2": ["K4", "K5", "K6", "K7"],"C": ["C0", "C1", "C2", "C3"],"D": ["D0", "D1", "D2", "D3"],}
)
mergeData1 = pd.merge(data3,data4)

#没有相同的key
data5 = pd.DataFrame({"A": ["A0", "A1", "A2", "A3"],"B": ["B0", "B1", "B2", "B3"],}
)
data6 = pd.DataFrame({"C": ["C0", "C1", "C2", "C3"],"D": ["D0", "D1", "D2", "D3"],}
)
pd.merge(data5,data6)
#MergeError: No common columns to perform merge on. Merge options: left_on=None, right_on=None, left_index=False, right_index=False

on 指定相同合并的列

pd.merge(data3,data4,on="key1")

pd.merge(data3,data4,on=["key1","key2"])

left_on, right_on 指定不同合并的列

data5 = pd.DataFrame({"key1": ["K0", "K1", "K2"],"A": ["A0", "A1", "A2"],"B": ["B0", "B1", "B2"],}
)
data6 = pd.DataFrame({"key2": ["K1", "K2", "K3"],"C": ["C0", "C1", "C2"],"D": ["D0", "D1", "D2"],}
)
pd.merge(data5,data6,left_on="key1",right_on="key2")

how - left、right、outer、inner(Default)、cross

#注意两个DaraFrame的key1和key2不一样
left = pd.DataFrame({"key1": ["K0", "K0", "K1", "K2"],"key2": ["K0", "K1", "K0", "K1"],"A": ["A0", "A1", "A2", "A3"],"B": ["B0", "B1", "B2", "B3"],}
)
right = pd.DataFrame({"key1": ["K0", "K1", "K1", "K2"],"key2": ["K0", "K0", "K0", "K0"],"C": ["C0", "C1", "C2", "C3"],"D": ["D0", "D1", "D2", "D3"],}
)

left :只保留左侧dataframe的keys进行合并,右侧dataframe的keys如果左侧dataframe没有的话,则删除。

pd.merge(left, right, how="left", on=["key1", "key2"])

right :只保留右侧dataframe的keys进行合并,左侧dataframe的keys如果右侧dataframe没有的话,则删除。

pd.merge(left, right, how="right", on=["key1", "key2"])

 outer :并集,即两个dataframe的keys都保留

pd.merge(left, right, how="outer", on=["key1", "key2"])

 inner :交集,即两个dataframe的相同keys才保留

pd.merge(left, right, how="inner", on=["key1", "key2"])

cross :组合,4*4=16行,但不能再使用"on"参数

pd.merge(left, right, how="cross")

left_index , right_index 通过index进行合并

left = pd.DataFrame({"A": ["A0", "A1", "A2"], "B": ["B0", "B1", "B2"]}, index=["K0", "K1", "K2"]
)right = pd.DataFrame({"C": ["C0", "C2", "C3"], "D": ["D0", "D2", "D3"]}, index=["K0", "K2", "K3"]
)#两个index都必须设置为True,否则报错。
pd.merge(left, right, left_index=True, right_index=True, how="outer")

pd.merge(left, right, left_index=True, right_index=True, how="inner")

suffixes 两个dataframe有相同的列名,并且这列名不做keys时,使用不同的后缀来区别两个dataframe的列

pd.merge(data3, data4, on="key1", how="outer", suffixes=("_first","_second"))

indicator 溯源,判断新dataframe的key分别来自哪个dataframe(both,left_only,right_only)

pd.merge(left, right, left_index=True, right_index=True, how="outer", indicator="indicator_column")

validate

"one_to_one" or "1:1": checks if merge keys are unique in both left and right datasets.
"one_to_many" or "1:m": checks if merge keys are unique in left dataset.
"many_to_one" or "m:1": checks if merge keys are unique in right dataset.
"many_to_many" or "m:m": allowed, but does not result in checks.

df1 = pd.DataFrame({"A": [1, 2], "B": [1, 2]})
df2 = pd.DataFrame({"A": [4, 5, 6], "B": [2, 2, 2]})
#右侧的df2,"B"列里是有重复的
pd.merge(df1, df2, on="B", how="outer", validate="one_to_one")
#MergeError: Merge keys are not unique in right dataset; not a one-to-one mergepd.merge(df1, df2, on="B", how="outer", validate="many_to_one")
#Merge keys are not unique in right dataset; not a many-to-one mergepd.merge(df1, df2, on="B", how="outer", validate="one_to_many")

#换A作为key试试。
pd.merge(df1, df2, on="A", how="outer", validate="one_to_one")
pd.merge(df1, df2, on="A", how="outer", validate="many_to_one")
pd.merge(df1, df2, on="A", how="outer", validate="one_to_many")
#都是同一个结果

merge其他更加复杂的合并方式,请大家移步官网:https://pandas.pydata.org/docs/user_guide/merging.html

pandas - merge 函数相关推荐

  1. Python科学计算之Pandas merge函数操作

    文章目录 Merge函数 Merge介绍 Merge操作 Merge函数 Merge介绍 pandas中的merge()函数类似于SQL中join的用法,可以将不同数据集依照某些字段(属性)进行合并操 ...

  2. pandas使用merge函数将多个dataframe数据连接起来、设置how参数为outer指定全连接(outer join)、left_on参数指定左侧dataframe的连接字段

    pandas使用merge函数将多个dataframe数据连接起来.设置how参数为outer指定全连接(outer join).left_on参数指定左侧dataframe的连接字段.right_o ...

  3. pandas使用merge函数将多个dataframe数据连接起来、设置how参数为left指定左连接(left join)、on参数指定连接字段

    pandas使用merge函数将多个dataframe数据连接起来.设置how参数为left指定左连接(left join).on参数指定连接字段 目录

  4. 【Python】Pandas宝藏函数-concat()

    在数据处理过程中,经常会遇到多个表进行拼接合并的需求,在Pandas中有多个拼接合并的方法,每种方法都有自己擅长的拼接方式,本文对pd.concat()进行详细讲解,希望对你有帮助.pd.concat ...

  5. 【Python】精选23个Pandas常用函数

    公众号:尤而小屋 作者:Peter 编辑:Peter 从26个字母中精选出23个Pandas常用的函数,将它们的使用方法介绍给大家.其中o.y.z没有相应的函数. import pandas as p ...

  6. python中merge函数怎么用_Python Merge函数原理及用法解析

    Merge函数的用法 简单来说Merge函数相当于Excel中的vlookup函数.当我们对2个表进行数据合并的时候需要通过指定两个表中相同的列作为key,然后通过key匹配到其中要合并在一起的val ...

  7. Python之数据合并——【concat()函数、merge()函数、join()方法、combine_first()方法】

    文章目录 轴向堆叠数据--concat()函数 横向堆叠与外连接 纵向堆叠与内连接 主键合并数据--merge()函数 内连接方式 外连接方式 左连接方式 右连接方式 其他 根据行索引合并数据--jo ...

  8. pandas 常用函数整理

    pandas常用函数整理,作为个人笔记. 仅标记函数大概用途做索引用,具体使用方式请参照pandas官方技术文档. 约定 from pandas import Series, DataFrame im ...

  9. 『Python核心技术与实战』pandas.DataFrame()函数介绍

    pandas.DataFrame()函数介绍! 文章目录 一. 创建DataFrame 1.1. numpy创建 1.2. 直接创建 1.3. 字典创建 1.4. Series和DataFrame 二 ...

最新文章

  1. python代码根据当前时间获取下一周的日期
  2. 实用--HTML的命名规范
  3. 平面设计常用的图像文件格式
  4. linux下载b站的视频+ffmpeg抽取出mp3
  5. Fiori UI上my contact加了Dr. 后搜索不出数据的奇怪问题
  6. 什么是压缩感知?[简单概括]
  7. 【opencv学习】光流算法以及物体追踪算法(Lucas-Kanade算法)
  8. java 获取方法名
  9. STM32F103_ADC-DMA通道采集
  10. 纯C下用ODBC访问数据库(实例) 转载
  11. Python 三人斗地主手牌生成
  12. 关于openGL, openGL ES, openVG及android中2D调用关系的报告
  13. 5G发展的五大动力和四大挑战
  14. 对网页游戏《卧龙吟》的分析3-----预登陆flash的源代码分析
  15. Electron 入门,主进程向渲染进程发送事件,渲染进程向主进程发送事件
  16. java utf8无bom格式_关于java:编写没有BOM的UTF-8
  17. LTE物理层概述(6)-- LTE之调制与解调及其matlab仿真
  18. 将虚拟机的Ubuntu映射为windows的网络驱动器
  19. 大数据有哪些工作?岗位技能要求汇总
  20. IDEA调试遇到Method breakpoints may dramatically slow down debugging

热门文章

  1. 服务器国产自研芯片,国产自研芯片新时代 龙芯A4000评测
  2. cobalt strike木马免杀
  3. CSS技巧:背景图转换动画
  4. Mac终端切换root用户
  5. 7 款免费的 Metro UI 模板
  6. 那些你气到笑出声的评论---键盘xia进化
  7. 基于C语言实现的多人在线聊天系统(客户端和服务端源码)
  8. Cadence Virtuoso IC618 AC仿真测量电容
  9. WZSZF 整站源码,原来就是DISCUZ。
  10. KEPServerEX 6.12.325.0 发布说明