DataFrame 数据合并实现(merge,join,concat)


Posted in Python onJune 14, 2020

merge

merge 函数通过一个或多个键将数据集的行连接起来。
场景:针对同一个主键存在的两张包含不同特征的表,通过主键的链接,将两张表进行合并。合并之后,两张表的行数不增加,列数是两张表的列数之和。

def 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):

参数 描述
how 数据融合的方法,从在不重合的键,方式(inner、outer、left、right)
on 用来对齐的列名,一定要保证左表和右表存在相同的列名。
left_on 左表对齐的列,可以是列名。也可以是DataFrame同长度的arrays
right_on 右表对齐的列,可以是列名。
left_index 将左表的index用作连接键
right_index 将右表的index用作连接键
suffixes 左右对象中存在重名列,结果区分的方式,后缀名。
copy 默认:True。将数据复制到数据结构中,设置为False提高性能。

特性示例(1)

默认:以重叠的列名当作连接键

df1 = pd.DataFrame({'key': ['one', 'two', 'two'],
          'data1': np.arange(3)})
df2 = pd.DataFrame({'key': ['one', 'three', 'three'],
          'data2': np.arange(3)})
df3 = pd.merge(df1, df2)
print(df1)
print(df2)
print(df3)
key data1
0 one   0
1 two   1
2 two   2
   key data2
0  one   0
1 three   1
2 three   2
  key data1 data2
0 one   0   0

特性示例(2)

默认:做inner连接,取key的交集
连接方式还有left right outer

df1 = pd.DataFrame({'key': ['one', 'two', 'two'],
          'data1': np.arange(3)})
df2 = pd.DataFrame({'key': ['one', 'three', 'three'],
          'data2': np.arange(3)})
df3 = pd.merge(df1, df2)
df4 = pd.merge(df1, df2, how='left')
print(df3)
print(df4)
key data1 data2
0 one   0   0
  key data1 data2
0 one   0  0.0
1 two   1  NaN
2 two   2  NaN

特性示例(3)

多键连接时将连接键做成列表传入。
on默认是两者同时存在的列

df1 = pd.DataFrame({'key': ['one', 'two', 'two'],
          'value': ['a', 'b', 'c'],
          'data1': np.arange(3)})
df2 = pd.DataFrame({'key': ['one', 'two', 'three'],
          'value': ['a', 'c', 'c'],
          'data2': np.arange(3)})
df5 = pd.merge(df1, df2)
df6 = pd.merge(df1, df2, on=['key', 'value'], how='outer')
print(df5)
print(df6)
key value data1 data2
0 one   a   0   0
1 two   c   2   1
   key value data1 data2
0  one   a  0.0  0.0
1  two   b  1.0  NaN
2  two   c  2.0  1.0
3 three   c  NaN  2.0

特性示例(4)

两个对象的列名不同,需要分别制定。

df7 = pd.merge(df1, df2, left_on=['key1','data1'], right_on=['key2','data2'], how='outer')
print(df7)
key1 value_x data1  key2 value_y data2
0 one    a  0.0  one    a  0.0
1 two    b  1.0  two    c  1.0
2 two    c  2.0  NaN   NaN  NaN
3 NaN   NaN  NaN three    c  2.0

join

join方法将两个DataFrame中不同的列索引合并成为一个DataFrame
参数的意义与merge基本相同,只是join方法默认左外连接how=left

def join(self, other, on=None, how='left', lsuffix='', rsuffix='',
     sort=False):

示例

df1 = pd.DataFrame({'A': ['A0', 'A1', 'A1'],
          'B': ['B0', 'B1', 'B2']},
          index=['K0', 'K1', 'K2'])
df2 = pd.DataFrame({'C': ['C1', 'C2', 'C3'],
          'D': ['D0', 'D1', 'D2']},
          index=['K0', 'K1', 'K3'])
df3 = df1.join(df2)
df4 = df1.join(df2, how='outer')
df5 = df1.join(df2, how='inner')
print(df3)
print(df4)
print(df5)
A  B  C  D
K0 A0 B0  C1  D0
K1 A1 B1  C2  D1
K2 A1 B2 NaN NaN
   A  B  C  D
K0  A0  B0  C1  D0
K1  A1  B1  C2  D1
K2  A1  B2 NaN NaN
K3 NaN NaN  C3  D2
   A  B  C  D
K0 A0 B0 C1 D0
K1 A1 B1 C2 D1

concat

制定按某个轴进行连接(可横向可纵向),也可以指定连接方法。

def concat(objs, axis=0, join='outer', join_axes=None, ignore_index=False,
      keys=None, levels=None, names=None, verify_integrity=False,
      sort=None, copy=True):

属性 描述
objs 合并的对象集合。可以是Series、DataFrame
axis 合并方法。默认0,表示纵向,1横向
join 默认outer并集,inner交集。只有这两种
join_axes 按哪些对象的索引保存
ignore_index 默认Fasle忽略。是否忽略原index
keys 为原始DataFrame添加一个键,默认无

示例(1)

s1 = pd.Series(['a', 'b'])
s2 = pd.Series(['c', 'd'])
s3 = pd.concat([s1, s2])
s4 = pd.concat([s1, s2], ignore_index=True)
print(s3)
print(s4)
0  a
1  b
dtype: object
0  c
1  d
dtype: object
0  a
1  b
0  c
1  d
dtype: object
0  a
1  b
2  c
3  d
dtype: object

示例(2)

df1 = pd.DataFrame([['a', 1], ['b', 2]], columns=['A', 0])
df2 = pd.DataFrame([['a', 1], ['b', 2]], columns=['B', 0])
df3 = pd.concat([df1, df2], join='inner')
print(df3)
0
0 1
1 2
0 1
1 2

示例(3)

df1 = pd.DataFrame([['a', 1], ['b', 2]], columns=['A', 0])
df2 = pd.DataFrame([['a', 1], ['b', 2]], columns=['B', 0])
df3 = pd.concat([df1, df2], axis=1, join_axes=[df1.index])
print(df3)
A 0 B 0
0 a 1 a 1
1 b 2 b 2

append

横向和纵向同时扩充,不考虑columns和index

df1 = pd.DataFrame({'A': ['A0', 'A1', 'A1'],
          'B': ['B0', 'B1', 'B2']},
          index=['K0', 'K1', 'K2'])
s2 = pd.Series(['X0','X1'], index=['A','B'])
result = df1.append(s2, ignore_index=True)
print(result)
A  B
K0 A0 B0
K1 A1 B1
K2 A1 B2
  A  B
0 A0 B0
1 A1 B1
2 A1 B2
3 X0 X1

汇总

  • concat:可以沿一条轴将多个对象连接到一起
  • merge:可以根据一个或多个键将不同的DataFrame中的行连接起来。
  • join:inner是交集,outer是并集。

到此这篇关于DataFrame 数据合并实现(merge,join,concat)的文章就介绍到这了,更多相关DataFrame 数据合并内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木! 

Python 相关文章推荐
pandas中去除指定字符的实例
May 18 Python
Flask框架信号用法实例分析
Jul 24 Python
Python 移动光标位置的方法
Jan 20 Python
Appium+python自动化怎么查看程序所占端口号和IP
Jun 14 Python
Python获取、格式化当前时间日期的方法
Feb 10 Python
python GUI库图形界面开发之PyQt5单选按钮控件QRadioButton详细使用方法与实例
Feb 28 Python
Python在后台自动解压各种压缩文件的实现方法
Nov 10 Python
记一次python 爬虫爬取深圳租房信息的过程及遇到的问题
Nov 24 Python
浅析Python 中的 WSGI 接口和 WSGI 服务的运行
Dec 09 Python
利用Python函数实现一个万历表完整示例
Jan 23 Python
python利用appium实现手机APP自动化的示例
Jan 26 Python
Python基础之元编程知识总结
May 23 Python
python中pandas库中DataFrame对行和列的操作使用方法示例
Jun 14 #Python
Django 构建模板form表单的两种方法
Jun 14 #Python
Python Django搭建网站流程图解
Jun 13 #Python
Python xpath表达式如何实现数据处理
Jun 13 #Python
Python轻量级web框架bottle使用方法解析
Jun 13 #Python
PyInstaller运行原理及常用操作详解
Jun 13 #Python
Pandas缺失值2种处理方式代码实例
Jun 13 #Python
You might like
咖啡是不是喝了会上瘾?咖啡是必须品吗!
2021/03/04 新手入门
php结合js实现点击超链接执行删除确认操作
2014/10/31 PHP
php array_key_exists() 与 isset() 的区别
2016/10/24 PHP
PHP设计模式之装饰器模式实例详解
2018/02/07 PHP
php 后端实现JWT认证方法示例
2018/09/04 PHP
浅谈PHP SHA1withRSA加密生成签名及验签
2019/03/18 PHP
学习ExtJS form布局
2009/10/08 Javascript
js中获取事件对象的方法小结
2011/03/13 Javascript
通过百度地图获取公交线路的站点坐标的js代码
2012/05/11 Javascript
JavaScript回调(callback)函数概念自我理解及示例
2013/07/04 Javascript
jQuery打印指定区域Html页面并自动分页
2014/07/04 Javascript
javascript实现十秒钟后注册按钮可点击的方法
2015/05/13 Javascript
详解jquery事件delegate()的使用方法
2016/01/25 Javascript
js实现旋转木马效果
2017/03/17 Javascript
详解JS转换数值函数Number()、parseInt()、parseFloat()
2018/08/24 Javascript
微信小程序如何使用globalData的方法
2019/06/06 Javascript
vue插槽slot的简单理解与用法实例分析
2020/03/14 Javascript
用Python的urllib库提交WEB表单
2009/02/24 Python
Python的函数嵌套的使用方法
2014/01/24 Python
使用Python编写提取日志中的中文的脚本的方法
2015/04/30 Python
解决python 未发现数据源名称并且未指定默认驱动程序的问题
2018/12/07 Python
Django上使用数据可视化利器Bokeh解析
2019/07/31 Python
python基础 range的用法解析
2019/08/23 Python
学Python 3的理由和必要性
2019/11/19 Python
Python3 使用selenium插件爬取苏宁商家联系电话
2019/12/23 Python
python的slice notation的特殊用法详解
2019/12/27 Python
PyTorch里面的torch.nn.Parameter()详解
2020/01/03 Python
Python dict和defaultdict使用实例解析
2020/03/12 Python
jupyter 中文乱码设置编码格式 避免控制台输出的解决
2020/04/20 Python
加拿大约会网站:EliteSingles.ca
2018/01/12 全球购物
美国精油公司:Plant Therapy
2019/05/17 全球购物
助人为乐表扬信范文
2014/01/14 职场文书
手机被没收检讨书
2014/02/22 职场文书
敬老月活动总结
2014/08/28 职场文书
销售人才自我评价范文
2014/09/27 职场文书
Win10鼠标宏怎么设置?win10系统鼠标宏的设置方法
2022/08/14 数码科技