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 相关文章推荐
pymongo为mongodb数据库添加索引的方法
May 11 Python
Python的string模块中的Template类字符串模板用法
Jun 27 Python
Python 爬虫多线程详解及实例代码
Oct 08 Python
python set内置函数的具体使用
Jul 02 Python
python函数调用,循环,列表复制实例
May 03 Python
django restframework serializer 增加自定义字段操作
Jul 15 Python
Python调用jar包方法实现过程解析
Aug 11 Python
分享unittest单元测试框架中几种常用的用例加载方法
Dec 02 Python
用Python爬虫破解滑动验证码的案例解析
May 06 Python
Python机器学习之KNN近邻算法
May 14 Python
如何理解python接口自动化之logging日志模块
Jun 15 Python
python在package下继续嵌套一个package
Apr 14 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实现购物车功能(下)
2016/01/05 PHP
thinkPHP中配置的读取与C方法详解
2016/12/05 PHP
php实现等比例压缩图片
2018/07/26 PHP
laravel Validator ajax返回错误信息的方法
2019/09/29 PHP
asp javascript 实现关闭窗口时保存数据的办法
2007/11/24 Javascript
jquery中:input和input的区别分析
2011/07/13 Javascript
js中eval详解
2012/03/30 Javascript
基于javascript 闭包基础分享
2013/07/10 Javascript
使用AngularJS创建单页应用的编程指引
2015/06/19 Javascript
JQuery组件基于Bootstrap的DropDownList(完整版)
2016/07/05 Javascript
前端 Vue.js 和 MVVM 详细介绍
2016/12/29 Javascript
简单谈谈Javascript函数中的arguments
2017/02/09 Javascript
基于jQuery和CSS3实现APPLE TV海报视差效果
2017/06/16 jQuery
vue 实现通过手机发送短信验证码注册功能
2018/04/19 Javascript
layui实现动态和静态分页
2018/04/28 Javascript
微信小程序自定义多选事件的实现代码
2018/05/17 Javascript
Django管理员账号和密码忘记的完美解决方法
2018/12/06 Python
Python中Numpy ndarray的使用详解
2019/05/24 Python
django框架实现一次性上传多个文件功能示例【批量上传】
2019/06/19 Python
python利用wx实现界面按钮和按钮监听和字体改变的方法
2019/07/17 Python
使用Windows批处理和WMI设置Python的环境变量方法
2019/08/14 Python
pytorch梯度剪裁方式
2020/02/04 Python
通过python 执行 nohup 不生效的解决
2020/04/16 Python
终于搞懂了Keras中multiloss的对应关系介绍
2020/06/22 Python
python使用建议与技巧分享(一)
2020/08/17 Python
python中字符串的编码与解码详析
2020/12/03 Python
纯CSS3实现的8种Loading动画效果
2014/07/05 HTML / CSS
小蚁科技官方商店:YI Technology
2019/08/23 全球购物
复核员上岗演讲稿
2014/01/05 职场文书
办公室综合文员岗位职责范本
2014/02/13 职场文书
初中三好学生自我鉴定
2014/04/07 职场文书
授权委托书范文
2014/07/31 职场文书
小学师德师风演讲稿
2014/09/02 职场文书
工会积极分子个人总结
2015/03/03 职场文书
JavaScript原型链详解
2021/11/07 Javascript
详解ZABBIX监控ESXI主机的问题
2022/06/21 Servers