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实例方法实现了用参数对象中的数据为调用者对象的缺失数据"打补丁”,并且会自动对齐索引。