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 相关文章推荐
Python list操作用法总结
Nov 10 Python
python中in在list和dict中查找效率的对比分析
May 04 Python
python保存文件方法小结
Jul 27 Python
python对日志进行处理的实例代码
Oct 06 Python
python遍历文件目录、批量处理同类文件
Aug 31 Python
Python标准库json模块和pickle模块使用详解
Mar 10 Python
详解使用python3.7配置开发钉钉群自定义机器人(2020年新版攻略)
Apr 01 Python
浅谈python 调用open()打开文件时路径出错的原因
Jun 05 Python
Python自动发送和收取邮件的方法
Aug 12 Python
Pycharm自动添加文件头注释和函数注释参数的方法
Oct 23 Python
python小技巧——将变量保存在本地及读取
Nov 13 Python
Python常遇到的错误和异常
Nov 02 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
php使用codebase生成随机数
2014/03/25 PHP
PHP按行读取、处理较大CSV文件的代码实例
2014/04/09 PHP
JavaScript charCodeAt方法入门实例(用于取得指定位置字符的Unicode编码)
2014/10/17 Javascript
jQuery中after()方法用法实例
2014/12/25 Javascript
javascript中$(function() {});写与不写有哪些区别
2015/08/10 Javascript
JavaScript中var关键字的使用详解
2015/08/14 Javascript
Bootstrap的图片轮播示例代码
2015/08/31 Javascript
WordPress中利用AJAX异步获取评论用户头像的方法
2016/01/08 Javascript
浅谈JavaScript中的this指针和引用知识
2016/08/05 Javascript
使用Node.js给图片加水印的方法
2016/11/15 Javascript
分析JS单线程异步io回调的特性
2017/12/01 Javascript
vue集成百度UEditor富文本编辑器使用教程
2018/09/21 Javascript
Node.js EventEmmitter事件监听器用法实例分析
2019/01/07 Javascript
微信小程序利用Canvas绘制图片和竖排文字详解
2019/06/25 Javascript
微信小程序实现点击卡片 翻转效果
2019/09/04 Javascript
Javascript操作select控件代码实例
2020/02/14 Javascript
Vue中关闭弹窗组件时销毁并隐藏操作
2020/09/01 Javascript
python将ansible配置转为json格式实例代码
2017/05/15 Python
浅谈python迭代器
2017/11/08 Python
python实现泊松图像融合
2018/07/26 Python
Python实现数据可视化看如何监控你的爬虫状态【推荐】
2018/08/10 Python
python列表每个元素同增同减和列表元素去空格的实例
2019/07/20 Python
Python3 chardet模块查看编码格式的例子
2019/08/14 Python
python中Lambda表达式详解
2019/11/20 Python
keras 多gpu并行运行案例
2020/06/10 Python
全球速卖通俄罗斯站:AliExpress俄罗斯
2019/06/17 全球购物
英国顶尖手表珠宝品牌独家授权经销商:HS Johnson
2020/10/28 全球购物
为什么要做架构设计
2015/07/08 面试题
办公室助理岗位职责
2013/12/25 职场文书
致跳高运动员加油稿
2014/02/12 职场文书
2014中考励志标语
2014/06/05 职场文书
党支部工作总结2015
2015/04/01 职场文书
高中团支书竞选稿
2015/11/21 职场文书
五年级数学教学反思
2016/02/16 职场文书
Golang: 内建容器的用法
2021/05/05 Golang
Python办公自动化解决world文件批量转换
2021/09/15 Python