pandas---数据合并(concat、append、merge)

news2024/11/15 21:28:26

1. concat函数

pd.concat([data1, data2], axis=1)

按照行或列进行合并,axis=0为列索引,axis=1为行索引。

df1 = make_df([1, 2], ['A', 'B'])
df2 = make_df([3, 4], ['A', 'B'])
display(df1, df2)
# 默认上下合并,垂直合并
pd.concat([df1, df2])  
# 左右合并,水平合并
pd.concat([df1, df2], axis=1)  

# 忽略行索引:重置索引
pd.concat([df1, df2], ignore_index=True)
# 使用多层索引 keys
pd.concat([df1, df2], keys=['x', 'y'])
pd.concat([df1, df2], keys=['x', 'y'], axis=1)

不匹配级联指的是级联的维度的索引不一致。例如纵向级联时列索引不一致,横向级联时行索引不

一致。对应索引没有值,会自动用NaN填充。

外连接:类似并集,显示所有数据,补NaN(默认模式)。

内连接: 类似交集, 只显示共同的部分,只连接匹配的项。

pd.concat([df3, df4])
pd.concat([df3, df4], join='outer')
pd.concat([df3, df4], join='inner')

 2. append函数

display(df3, df4)
df3.append(df4)

3. merge函数

类似MySQL中表和表直接的合并;

merge与concat的区别在于,merge需要依据某一共同的行或列来进行合并;

使用pd.merge()合并时,会自动根据两者相同column名称的那一列,作为key来进行合并;

每一列元素的顺序不要求一致。

# 一对一合并
df1 = pd.DataFrame({
    'name': ['张三', '李四', '王五'],
    'id': [1, 2, 3],
    'age': [22, 33, 44]
})
df2 = pd.DataFrame({
    'id': [2, 3, 4],
    'sex': ['男', '女', '男'],
    'job': ['Saler', 'CEO', 'Programer']
})
display(df1, df2)
# 合并: 
# pd.merge(df1, df2)
df1.merge(df2)

 

# 多对一合并
df3 = pd.DataFrame({
    'name': ['张三', '李四', '王五'],
    'id': [1, 2, 2],
    'age': [22, 33, 44]
})
df4 = pd.DataFrame({
    'id': [2, 3, 4],
    'sex': ['男', '女', '男'],
    'job': ['Saler', 'CEO', 'Programer']
})
display(df3, df4)
df3.merge(df4)

 

# 多对多合并
df5 = pd.DataFrame({
    'name': ['张三', '李四', '王五'],
    'id': [1, 2, 2],
    'age': [22, 33, 44]
})
df6 = pd.DataFrame({
    'id': [2, 2, 4],
    'sex': ['男', '女', '男'],
    'job': ['Saler', 'CEO', 'Programer']
})
display(df5, df6)
df5.merge(df6)

 

key的规范化:

使用on=显式指定哪一列为key,当2个DataFrame有多列相同时使用:

df1 = pd.DataFrame({
    'id': [1, 2, 3],
    'name': ['张三', '李四', '王五'],
    'age': [22, 33, 44]
})
df2 = pd.DataFrame({
    'id': [2, 3, 4],
    'name': ['王五', '女', '男'],
    'job': ['Saler', 'CEO', 'Programer']
})
display(df1, df2)
# 如果有多列名称相同,需要指定一列作为连接的字段
# df1.merge(df2, on='id')
df1.merge(df2, on='name')

 

使用left_on和right_on指定左右两边的列作为key,当左右两边的key都不相等时使用:

# 如果没有相同的列名,则需要使用left_on,right_on来分别指定2个表中的不同列作为连接的字段
df1.merge(df2, left_on='id', right_on='id2')

当左边的列和右边的index相同的时候,使用right_index=True:

# 可以使用行索引作为连接的字段
df1.merge(df2, left_index=True, right_index=True)
df1.merge(df2, left_index=True, right_on='id2')

内合并:只保留两者都有的key(默认模式);

外合并 how='outer':补NaN;

左合并、右合并:how='left',how='right'。

# 外连接 : 会显示2个表的所有数据
df1.merge(df2, how='outer')
# 左连接: 显示左边df1表的所有数据和右边表df2的公共数据
df1.merge(df2, how='left')
# 右连接: 显示右边df2表的所有数据和左边表df1的公共数据
df1.merge(df2, how='right')

列冲突的解决:

即有多个列名称相同时,需要使用on=来指定哪一个列作为key,配合suffixes指定冲突列名,

可以使用suffixes=自己指定后缀。

df1 = pd.DataFrame({
    'id': [1, 2, 3],
    'name': ['张三', '李四', '王五'],
    'age': [22, 33, 44]
})
df2 = pd.DataFrame({
    'id': [2, 3, 4],
    'name': ['男', '女', '男'],
    'job': ['Saler', 'CEO', 'Programer']
})
display(df1, df2)
df1.merge(df2, on='id', suffixes=['_df1', '_df2'])

 

总结:

合并有三种现象: 一对一、多对一、多对多;

合并默认会找相同的列名进行合并,如果有多个列名相同,用on来指定;

如果没有列名相同,但是数据又相同,可以通过left_on、right_on来分别指定要合并的列;

如果想和index合并,使用left_index, right_index来指定;

如果多个列相同,合并之后可以通过suffixes来区分;

还可以通过how来控制合并的结果,默认是内合并,还有外合并outer,左合并left,右合并right。

 

 

 

 

 

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/642750.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【机器学习】——学习的基本分类:算法模拟的根本出发点!

目录 引入 一、分类 1、基于学习策略的分类 2、基于所获取知识的表示形式分类 3、按应用领域分类 4、综合分类 二、研究领域 引入 机器学习是继专家系统后人工智能的又一重要研究领域!机器学习是研究计算机怎样模拟或实现人类的学习行为,以获取新…

前端面试经验技巧分享

👩 个人主页:不爱吃糖的程序媛 🙋‍♂️ 作者简介:前端领域新星创作者、CSDN内容合伙人,专注于前端各领域技术,成长的路上共同学习共同进步,一起加油呀! ✨系列专栏:前端…

NVIDIA的StyleGAN、StyleGAN2、StyleGAN3系列论文解读,梳理基于风格的生成器架构

通俗来讲就是,张三造假币(Generator生成器),然后用验钞机去验证真假(Discriminator辨别器),如果是假的就继续提高造假技术,直到验钞机检验不出来为止,也就是说一个造假一个验假(验钞机也需升级),两者互相学…

Redis集群部署

Redis集群部署 1.单机安装Redis2.Redis主从集群2.1.集群结构2.2.准备实例和配置2.3.启动2.4.开启主从关系2.5.测试 3.搭建哨兵集群3.1.集群结构3.2.准备实例和配置3.3.启动3.4.测试 4.搭建分片集群4.1.集群结构4.2.准备实例和配置4.3.启动4.4.创建集群4.5.测试4.5.测试 本章是基…

安全 --- 内网基础知识(01)

内网基础知识 (1)概念 内网也称局域网(Local Area Network,LAN)是指在某一工作区域内由多台计算机互联形成的计算机组,一般是方圆几千米内。局域网可实现文件管理、应用软件共享、打印机共享、工作内的历…

新一代绿色智慧数据中心电气规划设计与常识(一)

绿色智慧数据中心 随着大数据、云计算、人工智能、区块链、ChatGPT等技术加速创新,数字文化产业发展动力强劲,不断解锁新兴业态。近年来,各级政府重要会议中也多次强调“新基建”今后一段时期驱动新一轮产业革命的战略性新兴产业&#xff0c…

软件测试06:软件测试原则和黑盒测试用例设计方法

软件测试原则 所有测试的标准都是建立在用户需求之上软件测试必须基于"质量第一"的思想去开展各项工作,当时间和质量冲突时,时间要服从质量事先定义好产品的质量标准,只有有了质量标准,才嫩如果根据测试的结果&#xf…

今年找工作真的好难啊,一秒泪崩

在入行前端开发之前,我看过了很多从学校毕业之后一事无成的人,而我心气比较高,接受不了自己也一样浑浑噩噩地过。偶然机会接触到了前端开发,觉得很有意思,思考再三之后,决定去做这件自己喜欢又能有所成就的…

散热差、设计古板,因循守旧的联想Thinkpad还能获得忠粉的青睐吗?

拥有航天梦想的联想ThinkPad,在5月18日的新品发布会上,再次与中国航天太空创想达成了合作,将整场发布会的格调提升到了没有“边际”的高度。 发布会上,联想ThinkPad宣布了几款新品的面世,产品性能的升级和优化必不可少…

ICASSP 2023 | 深度窄带网络消除实时语音通信中的干扰音

来源:ICASSP 2023 作者:Feifei Xiong, Jinwei Feng等 论文题目:Deep Subband Network for Joint Suppression of Echo, Noise and Reverberation in Real-Time Fullband Speech Communication 本文由阿里巴巴钉钉蜂鸣鸟音频实验室&#xff08…

使用vuex记住当前页面页码信息,以便从详情页返回列表页时能还原到上一次页面

文章目录 一、在vuex中需要完成的工作二、在需要记住页面信息的列表页组件中添加如下代码,比如list.vue:三、在详情页添加返回按钮(可选)四、顺便来总结下,能返回上一级页面的方法有2类5种:五、总结,记住当…

移动设备管理:自带设备办公(BYOD)管理

什么是自带设备办公(BYOD) 自带设备办公(BYOD)指一些企业允许员工携带自己的笔记本电脑、平板电脑、智能手机等移动终端设备到办公场所,并可以用这些设备获取公司内部信息、使用企业特许应用的一种政策,企…

支持AUTOSAR Classic以及Adaptive平台的DEXT诊断数据库

一 DEXT、DCM、DEM和FIM的概述 DEXT(Diagnostic Extract Template)是AUTOSAR定义的诊断提取模板,用于DCM(Diagnostics Communication Manager)、DEM(Diagnostics Event Manager)和FIM&#xff…

【数据库原理与应用 - 第六章】T-SQL 在SQL Server的使用

目录 一、数据库定义语言DDL 1、数据库的定义 (1)创建数据库 (2)管理数据库 2、基本表的定义 (1)创建基本表 (2)修改基本表 3、索引的定义 (1)创建索…

东北小胖丫华夏受邀拍摄“沈水之阳,我心向往,寻美沈阳”宣传片

6月1日-4日,东北小胖丫华夏带领华夏星闪闪爱心公益服务队的小志愿者们,在沈阳的地标性建筑——沈阳故宫、中街、五里河公园等地,拍摄了“寻美沈阳”宣传片。 宣传片以“沈水之阳,我心向往,我爱沈阳,我爱家乡…

希尔贝壳邀您参加2023深圳国际人工智能展览会

2023深圳国际人工智能展览会“AIE”将于2023年5月16-18日在深圳国际会展中心 (宝安)举办,希尔贝壳受邀参加,展位号:A331。 伴随着智能行业的快速发展,展会已被越来越多的企业列入每年必选展会,也成为各采购商选购的理…

互联网 Java 高级工程师面试 1000 题 + 答案汇总(社招最新版)

作为一个 Java 程序员,你平时总是陷在业务开发里,每天噼里啪啦忙敲着代码,上到系统开发,下到 Bug 修改,你感觉自己无所不能。然而偶尔的一次聚会,你听说和自己一起出道的同学早已经年薪 50 万,而…

web期末大作业--网页设计 HTML+CSS+JS(附源码)

目录 一,作品介绍 二.运用知识 三.作品详情 四.部分作品效果图 我的:​编辑 五.部分源代码 六.文件目录 七.源码 一,作品介绍 作品介绍:该作品是一个是一个关于影视作品的网页,一共有五个页面,主页&a…

安全狗(云)工作负载安全保护解决方案护航电信运营商多云环境下的数字安全

随着互联网技术的发展,云计算、大数据、物联网、微服务、容器等新技术的尝试和应用,基础设施架构呈现出更加“混合化”的趋势,虚拟化、微服务、容器等工作负载成为了新的业务载体。 一 保护(云)工作负载安全迫在眉睫…

迪赛智慧数——柱状图(极坐标扇图):我国民众普遍面临的睡眠问题

效果图 常见的睡眠问题,你占了哪一样? 在网络科技发达的今天,伴随着高压快节奏的生活状态,各阶层各年龄段的睡眠问题接踵而至,甚至只增不减,一觉到天亮的好睡眠变得无价。据最新睡眠报告数据显示,75%的受…