python 数据融合函数pd.merge() (数据酷客学习总结)

pd.merge()常用参数

在这里插入图片描述

import pandas as pd

left = pd.DataFrame({'姓名':['q','w','e'],'年龄':['18','19','20']})

right = pd.DataFrame({'姓名':['q','w','r'],'籍贯':['湖北','北京','上海']})

left

	姓名 	年龄
0 	q 	18
1 	w 	19
2 	e 	20

right

	姓名 	籍贯
0 	q 	湖北
1 	w 	北京
2 	r 	上海

# 使用pd.merge()方式进行融合,在默认情况下将重叠列当做键,也可通过参数on指定键

pd.merge(left,right,on='姓名')

	姓名 	年龄 	籍贯
0 	q 	18 	湖北
1 	w 	19 	北京

# how默认为交集inner,可以指定为并集outer

pd.merge(left,right,on='姓名',how='outer')

	姓名 	年龄 	籍贯
0 	q 	18 	湖北
1 	w 	19 	北京
2 	e 	20 	NaN
3 	r 	NaN 	上海

pd.merge(left,right,on='姓名',how='left')

	姓名 	年龄 	籍贯
0 	q 	18 	湖北
1 	w 	19 	北京
2 	e 	20 	NaN

pd.merge(left,right,on='姓名',how='right')

	姓名 	年龄 	籍贯
0 	q 	18 	湖北
1 	w 	19 	北京
2 	r 	NaN 	上海

# 设定indicator参数为True ,则融合结果中将增加列名为"_merge"的一列,其取值代表了不同的含义: 

pd.merge(left,right,on='姓名',how='outer',indicator=True)

	姓名 	年龄 	籍贯 	_merge
0 	q 	18 	湖北 	both
1 	w 	19 	北京 	both
2 	e 	20 	NaN 	left_only
3 	r 	NaN 	上海 	right_only

indicator参数可以接收一个字符串,生成的指标列的列名将由" _merge"变为该字符串,结果说明如下:

在这里插入图片描述

pd.merge(left,right,on='姓名',how='outer',indicator=True)

	姓名 	年龄 	籍贯 	_merge
0 	q 	18 	湖北 	both
1 	w 	19 	北京 	both
2 	e 	20 	NaN 	left_only
3 	r 	NaN 	上海 	right_only

# indicator参数可以接收一个字符串,生成的指标列的列名将由" _merge"变为该字符串:

pd.merge(left,right,on='姓名',how='outer',indicator='融合')

	姓名 	年龄 	籍贯 	融合
0 	q 	18 	湖北 	both
1 	w 	19 	北京 	both
2 	e 	20 	NaN 	left_only
3 	r 	NaN 	上海 	right_only

# 不按共同列的融合,融合后共同列名自动增加后缀_x,_y

left = pd.DataFrame({'姓名1':['q','w','e'],'信息':['18','19','20']})

right = pd.DataFrame({'姓名2':['q','w','r'],'信息':['湖北','北京','上海']})

pd.merge(left,right,left_on='姓名1',right_on='姓名2',how='outer')

	姓名1 	信息_x 	姓名2 	信息_y
0 	q 	18 	q 	湖北
1 	w 	19 	w 	北京
2 	e 	20 	NaN 	NaN
3 	NaN 	NaN 	r 	上海

# 使用suffixes利用原列名以及后缀组合形成新的列名:

pd.merge(left,right,left_on='姓名1',right_on='姓名2',how='outer',suffixes=('_left','_right'))

	姓名1 	信息_left 	姓名2 	信息_right
0 	q 	18 	q 	湖北
1 	w 	19 	w 	北京
2 	e 	20 	NaN 	NaN
3 	NaN 	NaN 	r 	上海

# 创建left的索引为键, right的键为姓名的两个DataFrame :

left = pd.DataFrame({'年龄':['18','19','20']},index=['q','w','e'])

left.index.name='姓名'

right = pd.DataFrame({'姓名':['q','w','r'],'籍贯':['湖北','北京','上海']})

left

	年龄
姓名 	
q 	18
w 	19
e 	20

right

	姓名 	籍贯
0 	q 	湖北
1 	w 	北京
2 	r 	上海

pd.merge(left,right,left_index=True,right_on='姓名',how='outer') # 或者使用join:left.join(right,on='姓名',how='outer')

	年龄 	姓名 	籍贯
0 	18 	q 	湖北
1 	19 	w 	北京
2 	20 	e 	NaN
2 	NaN 	r 	上海

# 创建left和right的索引都为键的两个DataFrame :

left = pd.DataFrame({'年龄':['18','19','20']},index=['q','w','e'])

left.index.name='姓名'

right = pd.DataFrame({'籍贯':['湖北','北京','上海']},index=['q','w','r'])

right.index.name='姓名'

# 使用pd.merge()

pd.merge(left,right,left_index=True,right_index=True,how='outer')

	年龄 	籍贯
姓名 		
e 	20 	NaN
q 	18 	湖北
r 	NaN 	上海
w 	19 	北京

# 使用join

left.join(right,how='outer')

	年龄 	籍贯
姓名 		
e 	20 	NaN
q 	18 	湖北
r 	NaN 	上海
w 	19 	北京

# DataFrame.combine_ first实例方法实现了用参数对象中的数据为调用者对象的缺失数据"打补丁”,并且会自动对齐索引。
  • 12
    点赞
  • 67
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值