1.Merge语法

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) 

参数说明:

left,right:指左右两个DataFrame对象

how:默认情况下how='inner',how参数是指左右两个对象存在不重合的键时,取结果的方式,how='inner'取的是交集,how='outer'取的是并集,还有how='left',how='right',同时how='inter'称为内连接,outer称为外连接,left称为左连接,right称为右连接

on,left_on,right_on:默认情况下on=None,用来显示指定列名(键名),如果两个对象中的列名(键名)不相同时,可以分别使用left_on和right_on来分别指定两个对象的键名

left_index,right_index:如果想直接使用行索引作为连接键名的话,可以将left_index和right_index由原来的False设置为True

sort:默认情况下sort为True,将合并的数据进行排序,但是一般情况下sort设置为False可以提高性能

suffixes:字符串值组成的元组,用于指定当左右DataFrame存在相同列名时在列名后面附加的后缀名称,默认为('_x','_y')

copy:默认为True,总是将数据复制到数据结构中;大多数情况下设置为False可以提高性能

indicator:在 0.17.0中还增加了一个显示合并数据中来源情况;如只来自己于左边(left_only)、两者(both)

2.Merge范例

(1)两个对象中列名(键名)相同,都为key

1>直接merge(left,right)连接,how='inner'为默认,on=None为默认

#创建两个DataFrame对象
df_1 = pd.DataFrame({'key':['a','b','c','d'],'data':np.random.randint(1,5,4)
})
'''data key
0     2   a
1     1   b
2     4   c
3     3   d
'''
df_2 = pd.DataFrame({'key':['a','b','c','e','f'],'data':np.random.randint(1,5,5)
})
'''data key
0     2   a
1     1   b
2     4   c
3     3   d
'''
#直接使用merge合并
#how='inner'为默认,所以为内连接,取交集
#on没有指定的话,默认使用两个DataFrame对象的交集列名作为连接键
df = pd.merge(df_1,df_2,on='key',how='inner')
print(df)
'''data_x key  data_y
0       1   a       1
1       4   b       4
2       4   c       4
'''

(2)两个对象中列名(键名)不相同,分别为key1,key2

1>分别用left_on和right_on指定左右两个对象的键,并且使用inner内连接

#创建两个DataFrame对象
df_1 = pd.DataFrame({'key1':['a','b','c','d'],'data':np.random.randint(1,5,4)
})
'''data key1
0     2   a
1     1   b
2     4   c
3     3   d
'''
df_2 = pd.DataFrame({'key2':['a','b','c','e','f'],'data':np.random.randint(1,5,5)
})
'''data key2
0     2   a
1     1   b
2     4   c
3     3   d
'''
#使用left_on和right_on分别指定左右对象的键
#使用inner内连接,取对象的交集
df = pd.merge(df_1,df_2,left_on='key1',right_on='key2',how='inner')
print(df)
'''data_x key1  data_y key2
0       1    a       1    a
1       4    b       2    b
2       2    c       2    c
'''

2>分别用left_on和right_on指定左右两个对象的键,并且使用outer内连接

#创建两个DataFrame对象
df_1 = pd.DataFrame({'key1':['a','b','c','d'],'data':np.random.randint(1,5,4)
})
'''data key1
0     2   a
1     1   b
2     4   c
3     3   d
'''
df_2 = pd.DataFrame({'key2':['a','b','c','e','f'],'data':np.random.randint(1,5,5)
})
'''data key2
0     2   a
1     1   b
2     4   c
3     3   d
'''#使用outer外连接,取对象的并集
df = pd.merge(df_1,df_2,left_on='key1',right_on='key2',how='outer')
print(df)
#通过输出发现,对应位置上没有数据的全部自动填充为Nan
'''data_x key1  data_y key2
0     1.0    a     2.0    a
1     4.0    b     4.0    b
2     2.0    c     2.0    c
3     1.0    d     NaN  NaN
4     NaN  NaN     2.0    e
5     NaN  NaN     1.0    f
'''

3>分别用left_on和right_on指定左右两个对象的键,并且使用left左连接

#创建两个DataFrame对象
df_1 = pd.DataFrame({'key1':['a','b','c','d'],'data':np.random.randint(1,5,4)
})
'''data key1
0     2   a
1     1   b
2     4   c
3     3   d
'''
df_2 = pd.DataFrame({'key2':['a','b','c','e','f'],'data':np.random.randint(1,5,5)
})
'''data key2
0     2   a
1     1   b
2     4   c
3     3   d
'''#使用left左连接,优先保存左边对象数据的完整性
df = pd.merge(df_1,df_2,left_on='key1',right_on='key2',how='left')
print(df)
#从输入结果看出,优先保证左边数据的完整性,右边对应位置没有的数据自动填充Nan
'''data_x key1  data_y key2
0       4    a     4.0    a
1       1    b     1.0    b
2       2    c     2.0    c
3       2    d     NaN  NaN
'''

4>分别用left_on和right_on指定左右两个对象的键,并且使用right右连接

#创建两个DataFrame对象
df_1 = pd.DataFrame({'key1':['a','b','c','d'],'data':np.random.randint(1,5,4)
})
'''data key1
0     2   a
1     1   b
2     4   c
3     3   d
'''
df_2 = pd.DataFrame({'key2':['a','b','c','e','f'],'data':np.random.randint(1,5,5)
})
'''data key2
0     2   a
1     1   b
2     4   c
3     3   d
'''
#使用right右连接,优先保存右边对象数据的完整性
df = pd.merge(df_1,df_2,left_on='key1',right_on='key2',how='right')
print(df)
#从输出结果看出,优先保证了右边数据的完整性,左边对应没有位置的数据自动填充为Nan
'''data_x key1  data_y key2
0     2.0    a       1    a
1     4.0    b       3    b
2     1.0    c       4    c
3     NaN  NaN       4    e
4     NaN  NaN       4    f
'''

(3)使用对象的行索引作为连接键

# 按索引连接
df_1 = pd.DataFrame({'key':['b','b','c','c','b','a','b'],'data1':np.random.randint(1,10,7)
})
'''data1 key
0      4   b
1      7   b
2      2   c
3      2   c
4      5   b
5      2   a
6      2   b
'''
df_2 = pd.DataFrame({'data2':np.random.randint(0,10,3)},index=['a','b','c'])
'''data2
a      8
b      1
c      2
'''df = pd.merge(df1,df2,left_on='key',right_index=True,how='outer')
print(df)
'''data1 key  data2
0      8   b      6
1      9   b      6
4      5   b      6
6      9   b      6
2      3   c      5
3      8   c      5
5      3   a      4
'''

(4)处理重复列名

# 处理重复列名
df_1 = pd.DataFrame({'key':['b','b','c','c','b','a','b'],'data':np.random.randint(1,10,7)
})
'''data key
0     7   b
1     7   b
2     3   c
3     3   c
4     9   b
5     3   a
6     7   b
'''
df_2 = pd.DataFrame({'key':['a','b','d'],'data':np.random.randint(1,10,3)
})
'''data key
0     6   a
1     4   b
2     3   d
'''
df = pd.merge(df_1,df_2,on='key',suffixes=('_left','_right'))
print(df)
'''data_left key  data_right
0          7   b           4
1          7   b           4
2          9   b           4
3          7   b           4
4          3   a           6
'''

Pandas合并之Merge合并相关推荐

  1. pandas,pd.merge合并后出现2个后缀“_x“,“_y“

    例子:df_fund = pd.merge( df_fund, df_perf , left_on="基金代码", right_on="基金代码" ) left ...

  2. 分布式版本控制系统Git------分支管理与合并(merge与rebase)

    零.需要使用到的命令:        git branch                                  查看当前分支.        git branch <name> ...

  3. Pandas知识点-合并操作merge

    Pandas知识点-合并操作merge merge()方法是Pandas中的合并操作,在数据处理过程中很常用,本文介绍merge()方法的具体用法. 一.基础合并操作 merge(left, righ ...

  4. Python - pandas DataFrame数据的合并与拼接(merge、join、concat)

    目录 0 概述 1 merge方法 1.1 内连接 1.2 外连接 1.3 左连接 1.4 右连接 1.5 基于多列的连接算法 1.6 基于index的连接方法 2 join方法 2.1 index与 ...

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

    文章目录 1. 数据合并 1.1 merge()合并 1.2 concat()合并 1.3 combine()合并 2. 数据清洗 2.1 缺失值 2.2 重复值 2.3 内容与格式清洗 1. 数据合 ...

  6. 数据分析 第七讲 pandas练习 数据的合并、分组聚合、时间序列、pandas绘图

    文章目录 数据分析 第七讲 pandas练习 数据的合并和分组聚合 一.pandas-DataFrame 练习1 对于这一组电影数据,如果我们想runtime(电影时长)的分布情况,应该如何呈现数据? ...

  7. R语言dataframe合并函数merge实战

    R语言dataframe合并函数merge实战 目录 R语言dataframe合并函数merge实战 #仿真数据 #两个dataframe合并

  8. merge合并2个json文件

    merge合并2个json文件 功能 import { expect } from "chai"; import { createMerge } from "./merg ...

  9. python对数据进行合并的函数_利用Python pandas对Excel进行合并的方法示例

    前言 在网上找了很多Python处理Excel的方法和代码,都不是很尽人意,所以自己综合网上各位大佬的方法,自己进行了优化,具体的代码如下. 博主也是新手一枚,代码肯定有很多需要优化的地方,欢迎各位大 ...

最新文章

  1. 管道:介绍和基本服务
  2. mac 下系统目录权限问题
  3. 【数字信号处理】LTI 系统因果性与稳定性示例 ( 示例一 | 示例二 )
  4. 如何理解矩阵特征值?
  5. 新体验小说:作家重新卷入当代历史的一种方式——纪念“新体验小说”倡导一周...
  6. go操作mysql创建多对多_Django 数据库表多对多的创建和增删改查
  7. 百度地图mysql打点_关于百度地图连接MYSQL的问题,谢谢啦!
  8. 只靠自己的飞鸽传书想象和推断
  9. [转帖] 启动多个Tomcat 需要修改的端口
  10. 数据洞察|Qtum量子链4月主网报告
  11. 2019年美赛D题翻译与思路详解
  12. 谷歌浏览器如何免费复制百度文库,解决禁止复制,禁止使用右键等
  13. 微信群消息自动转发另一群
  14. Sumatra PDF——好用快捷工具介绍及使用
  15. Hbase+JAVAWeb实现超市仓库管理系统
  16. 品优购psd文档分享
  17. CocosCreator中使用Animation制作动画
  18. python tableau工作流_【干货】五分钟Get到Tableau五个实用小技巧
  19. ROS进行深度相机的标定
  20. 如何向centos服务器传文件,【实用】如何快速实现Windows和CentOS文件互传

热门文章

  1. 小孩上了半年小学,针对老师的评语总结,如何对症优化教育培养策略?chatGPT搜了一下,AI震惊了我
  2. 异贝,通过移动互联网技术,为中小微实体企业联盟、线上链接、线上线下自定义营销方案推送。案例62
  3. 快递100一面(Java)
  4. Win10亮度调节无效
  5. 全国低碳日·绿色低碳出行比赛-步数打卡小程序
  6. 若初见,若寻常,若是一双人
  7. 群英服务器网站,群英网
  8. Springboot 整合 Current-Limiting 实现接口限流
  9. LT6105电流检测放大器介绍
  10. 从Mac远程控制Windows