Pandas合并之Merge合并
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合并相关推荐
- pandas,pd.merge合并后出现2个后缀“_x“,“_y“
例子:df_fund = pd.merge( df_fund, df_perf , left_on="基金代码", right_on="基金代码" ) left ...
- 分布式版本控制系统Git------分支管理与合并(merge与rebase)
零.需要使用到的命令: git branch 查看当前分支. git branch <name> ...
- Pandas知识点-合并操作merge
Pandas知识点-合并操作merge merge()方法是Pandas中的合并操作,在数据处理过程中很常用,本文介绍merge()方法的具体用法. 一.基础合并操作 merge(left, righ ...
- 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与 ...
- 【数据科学】05 数据合并(merge、concat、combine)与数据清洗(缺失值、重复值、内容和格式)
文章目录 1. 数据合并 1.1 merge()合并 1.2 concat()合并 1.3 combine()合并 2. 数据清洗 2.1 缺失值 2.2 重复值 2.3 内容与格式清洗 1. 数据合 ...
- 数据分析 第七讲 pandas练习 数据的合并、分组聚合、时间序列、pandas绘图
文章目录 数据分析 第七讲 pandas练习 数据的合并和分组聚合 一.pandas-DataFrame 练习1 对于这一组电影数据,如果我们想runtime(电影时长)的分布情况,应该如何呈现数据? ...
- R语言dataframe合并函数merge实战
R语言dataframe合并函数merge实战 目录 R语言dataframe合并函数merge实战 #仿真数据 #两个dataframe合并
- merge合并2个json文件
merge合并2个json文件 功能 import { expect } from "chai"; import { createMerge } from "./merg ...
- python对数据进行合并的函数_利用Python pandas对Excel进行合并的方法示例
前言 在网上找了很多Python处理Excel的方法和代码,都不是很尽人意,所以自己综合网上各位大佬的方法,自己进行了优化,具体的代码如下. 博主也是新手一枚,代码肯定有很多需要优化的地方,欢迎各位大 ...
最新文章
- 管道:介绍和基本服务
- mac 下系统目录权限问题
- 【数字信号处理】LTI 系统因果性与稳定性示例 ( 示例一 | 示例二 )
- 如何理解矩阵特征值?
- 新体验小说:作家重新卷入当代历史的一种方式——纪念“新体验小说”倡导一周...
- go操作mysql创建多对多_Django 数据库表多对多的创建和增删改查
- 百度地图mysql打点_关于百度地图连接MYSQL的问题,谢谢啦!
- 只靠自己的飞鸽传书想象和推断
- [转帖] 启动多个Tomcat 需要修改的端口
- 数据洞察|Qtum量子链4月主网报告
- 2019年美赛D题翻译与思路详解
- 谷歌浏览器如何免费复制百度文库,解决禁止复制,禁止使用右键等
- 微信群消息自动转发另一群
- Sumatra PDF——好用快捷工具介绍及使用
- Hbase+JAVAWeb实现超市仓库管理系统
- 品优购psd文档分享
- CocosCreator中使用Animation制作动画
- python tableau工作流_【干货】五分钟Get到Tableau五个实用小技巧
- ROS进行深度相机的标定
- 如何向centos服务器传文件,【实用】如何快速实现Windows和CentOS文件互传