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 绘制拟合曲线并加指定点标识的实现
Jul 10 Python
python3中eval函数用法使用简介
Aug 02 Python
基于Python执行dos命令并获取输出的结果
Dec 30 Python
python 命名规范知识点汇总
Feb 14 Python
PyCharm永久激活方式(推荐)
Sep 22 Python
pycharm工具连接mysql数据库失败问题
Apr 01 Python
解决Keras 中加入lambda层无法正常载入模型问题
Jun 16 Python
python实现将中文日期转换为数字日期
Jul 14 Python
Pycharm Available Package无法显示/安装包的问题Error Loading Package List解决
Sep 18 Python
Python WebSocket长连接心跳与短连接的示例
Nov 24 Python
Python爬虫之Selenium实现键盘事件
Dec 04 Python
图文详解matlab原始处理图像几何变换
Jul 09 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 setcookie指定domain参数后,在IE下设置cookie失效的解决方法
2011/09/09 PHP
php实现设计模式中的单例模式详解
2014/10/11 PHP
php以post形式发送xml的方法
2014/11/04 PHP
php用ini_get获取php.ini里变量值的方法
2015/03/04 PHP
ThinkPHP自定义函数解决模板标签加减运算的方法
2015/07/03 PHP
详解php实现页面静态化原理
2017/06/21 PHP
发布一个高效的JavaScript分析、压缩工具 JavaScript Analyser
2007/11/30 Javascript
11个用于提高排版水平的基于jquery的文字效果插件
2012/09/14 Javascript
JavaScript调用堆栈及setTimeout使用方法深入剖析
2013/02/16 Javascript
Javascript中封装window.open解决不兼容问题
2014/09/28 Javascript
WebApi+Bootstrap+KnockoutJs打造单页面程序
2016/05/16 Javascript
JS基于面向对象实现的拖拽功能示例
2016/12/20 Javascript
微信小程序 scroll-view实现上拉加载与下拉刷新的实例
2017/01/21 Javascript
Vue.js对象转换实例
2017/06/07 Javascript
Node.js使用supervisor进行开发中调试的方法
2019/03/26 Javascript
ant-design-vue 时间选择器赋值默认时间的操作
2020/10/27 Javascript
解决vue项目本地启动时无法携带cookie的问题
2021/02/06 Vue.js
详细解析Python当中的数据类型和变量
2015/04/25 Python
python字符串与url编码的转换实例
2018/05/10 Python
django传值给模板, 再用JS接收并进行操作的实例
2018/05/28 Python
Python中的CSV文件使用"with"语句的方式详解
2018/10/16 Python
浅谈python中get pass用法
2019/03/19 Python
Python中捕获键盘的方式详解
2019/03/28 Python
基于Python实现天天酷跑功能
2021/01/06 Python
美国最灵活的移动提供商:Tello
2017/07/18 全球购物
大学生求职简历的自我评价范文
2013/10/12 职场文书
村干部培训班主持词
2014/03/28 职场文书
5s推行计划书
2014/05/06 职场文书
教育基金募捐倡议书
2014/05/14 职场文书
爱牙日活动总结
2014/08/29 职场文书
上班迟到检讨书
2014/09/15 职场文书
红领巾广播站广播稿
2014/10/19 职场文书
教师节座谈会主持词
2015/07/03 职场文书
2015暑假打工实践报告
2015/07/13 职场文书
公务员廉洁从政心得体会
2016/01/19 职场文书
Linux中sftp常用命令整理
2022/06/28 Servers