约定第一行代码

import pandas as pd

Merge-数据库风格的合并

数据的合并(merge)和连接(join)是我们在数据分析和挖掘中不可或缺的,是通过一个或一个以上的键连接的。pandas的合并(merge)的的绝大功能和数据库操作类似的

pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None, left_index=False,right_index=False, sort=False, suffixes=('_x', '_y'), copy=True, indicator=False, validate=None)

各参数的含义

left、right:左右连接对象

how:连接方式,共有’inner’,’left’,right’,’outer’

on:根据连接的键

left_on、right_on:在连接的键名不同的情况下使用,left_on传入左对象的键,right_on传入右对象的键

left_index、right_index:设置索引是否作为连接的键,通常 left_on=??和right_index=True, right_on=??和left_index=True,或者left_index=True和right_index=True

sort:对连接后的结果是否排序,当数据巨大的时候为了追求效率可以设置为False

suffixes:对于不作为键的同名列,在其列名后添加的后缀

copy:将左右对象的内容复制过来,默认为True

各个用法的例子

创建连接的左右对象

df1=pd.DataFrame({'名字':list('ABCDE'),'性别':['男','女','男','男','女'],'职称':['副教授','讲师','助教','教授','助教']},index=range(1001,1006))
df1.columns.name='学院老师'
df1.index.name='编号'
df1

代码结果

学院老师名字性别职教
编号
1001A副教授
1002B讲师
1003C助教
1004D教授
1005E助教
df2=pd.DataFrame({'名字':list('ABDAX'),'课程':['C++','计算机导论','汇编','数据结构','马克思原理'],'职称':['副教授','讲师','教授','副教授','讲师']},index=[1001,1002,1004,1001,3001])
df2.columns.name='课程'
df2.index.name='编号'
df2

代码结果

学院老师名字职教课程
编号
1001A副教授C++
1002B讲师计算机导论
1003D教授汇编
1004A副教授数据结构
3001X讲师马克思原理

1默认连接方式

默认下是根据左右对象中出现同名的列作为连接的键,且连接方式是on='inner'

pd.merge(df1,df2)

代码结果

名字性别职称课程
0A副教授C++
1A副教授数据结构
2B讲师计算机导论
3D教授汇编

2指定列名合并

pd.merge(df1,df2,on='名字')

代码结果

名字性别职称_x职称_y课程
0A副教授副教授C++
1A副教授副教授数据结构
2B讲师讲师计算机导论
3D教授教授汇编

3其他连接方式:left/right/outer

left

pd.merge(df1,df2,how='left')

代码结果

名字性别职称课程
0A副教授C++
1A副教授数据结构
2B讲师计算机导论
3C助教NaN
4D教授汇编
5E助教NaN

right

pd.merge(df1,df2,how='right')

代码结果

名字性别职称课程
0A副教授C++
1A副教授数据结构
2B讲师计算机导论
3D教授汇编
4XNaN讲师马克思原理

outer

pd.merge(df1,df2,how='outer')

代码结果

名字性别职称课程
0A副教授C++
1A副教授数据结构
2B讲师计算机导论
3C助教NaN
4D教授汇编
5E助教NaN
6XNaN讲师马克思原理

4根据多个键进行连接

pd.merge(df1,df2,on=['职称','名字'])

代码结果

名字性别职称_x职称_y课程
0A副教授副教授C++
1A副教授副教授数据结构
2B讲师讲师计算机导论
3D教授教授汇编

5对重复的列名处理

细心的你可能在上面的 2 观察到了,不作为连接键的相同列名更改了。那是因为当不指定连接的键的时候是将‘名字’、‘职称’作为连接的键

pd.merge(df1,df2,on='名字',suffixes=('_1','_2'))

代码结果

名字性别职称_1职称_2课程
0A副教授副教授C++
1A副教授副教授数据结构
2B讲师讲师计算机导论
3D教授教授汇编

6 将索引作为连接的键

当我们连接时,无论是左右对象的索引都会被丢弃的。当们需要将索引作为连接键时可以如下方式

pd.merge(df1,df2,on=['名字','职称'],left_index=True,right_index=True)

代码结果

名字性别职称课程
1001A副教授C++
1001A副教授数据结构
1002B讲师计算机导论
1004D教授汇编

世界因代码而改变 Peace Out
世界因代码而改变 Peace Out
最后修改:2020 年 10 月 07 日 03 : 20 PM
如果觉得我的文章对你有用,请随意赞赏