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之集成开发环境(IDE)
Sep 12 Python
Python使用BeautifulSoup库解析HTML基本使用教程
Mar 31 Python
shell命令行,一键创建 python 模板文件脚本方法
Mar 20 Python
python3解析库lxml的安装与基本使用
Jun 27 Python
Python基于SMTP协议实现发送邮件功能详解
Aug 14 Python
Python写一个基于MD5的文件监听程序
Mar 11 Python
python程序快速缩进多行代码方法总结
Jun 23 Python
python日期相关操作实例小结
Jun 24 Python
python opencv捕获摄像头并显示内容的实现
Jul 11 Python
flask 实现token机制的示例代码
Nov 07 Python
pycharm双击无响应(打不开问题解决办法)
Jan 10 Python
详解基于Facecognition+Opencv快速搭建人脸识别及跟踪应用
Jan 21 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 魔术函数使用说明
2010/02/21 PHP
PHP扩展模块Pecl、Pear以及Perl的区别
2014/04/09 PHP
PHP基于php_imagick_st-Q8.dll实现JPG合成GIF图片的方法
2014/07/11 PHP
php的ZipArchive类用法实例
2014/10/20 PHP
php英文单词统计器
2016/06/23 PHP
Javascript 面向对象之重载
2010/05/04 Javascript
JavaScript类库D
2010/10/24 Javascript
jquery实现心算练习代码
2010/12/06 Javascript
jQuery 过滤not()与filter()实例代码
2012/05/10 Javascript
在JavaScript中对HTML进行反转义详解
2016/05/18 Javascript
AngularJS ng-change 指令的详解及简单实例
2016/07/30 Javascript
微信小程序 SocketIO 实例讲解
2016/10/13 Javascript
快速入门Vue
2016/12/19 Javascript
vue2实现移动端上传、预览、压缩图片解决拍照旋转问题
2017/04/13 Javascript
20个最常见的jQuery面试问题及答案
2018/05/23 jQuery
如何理解Vue的v-model指令的使用方法
2018/07/19 Javascript
实例讲解vue源码架构
2019/01/24 Javascript
Vue实现点击导航栏当前标签后变色功能
2020/08/19 Javascript
微信小程序实现聊天室
2020/08/21 Javascript
ant design的table组件实现全选功能以及自定义分页
2020/11/17 Javascript
python中查看变量内存地址的方法
2015/05/05 Python
使用Python操作MySQL的一些基本方法
2015/08/16 Python
浅谈Matplotlib简介和pyplot的简单使用——文本标注和箭头
2018/01/09 Python
Python数据处理numpy.median的实例讲解
2018/04/02 Python
Python爬虫学习之获取指定网页源码
2019/07/30 Python
浅析matlab中imadjust函数
2020/02/27 Python
深入解析HTML5 Canvas控制图形矩阵变换的方法
2016/03/24 HTML / CSS
澳大利亚商务邀请函
2014/01/17 职场文书
西门豹教学反思
2014/02/04 职场文书
消防安全宣传口号
2014/06/10 职场文书
优秀应届生求职信
2014/06/16 职场文书
高一军训的心得体会
2014/09/01 职场文书
据Python爬虫不靠谱预测可知今年双十一销售额将超过6000亿元
2021/11/11 Python
HTML5 新增内容和 API详解
2021/11/17 HTML / CSS
JavaScript流程控制(分支)
2021/12/06 Javascript
《艾尔登法环》1.03.3补丁上线 碎星伤害调整
2022/04/07 其他游戏