python数据分析:详解数据框的合并
liuian 2025-09-04 11:49 4 浏览
不知道大家有没有分析过Kaggle的数据或者参加过Kaggle的挑战,里面的数据都分布在几个不同的数据集中,合并数据在所难免。今天给大家详细总结一波pandas中数据框合并和连接的方法。建议收藏,哈哈。
生成练习用的数据框
首先我们先用如下代码生成3个数据框,作为演示讲解之用。
df1 =pd.DataFrame({
'id': ['1', '2', '3', '4', '5'],
'Feature1': ['A', 'C', 'E', 'G', 'I'],
'Feature2': ['B', 'D', 'F', 'H', 'J']})
df2 =pd.DataFrame({
'id': ['1', '2', '6', '7', '8'],
'Feature1': ['K', 'M', 'O', 'Q', 'S'],
'Feature2': ['L', 'N', 'P', 'R', 'T']})
df3 = pd.DataFrame({
'id': ['1', '2', '3', '4', '5', '7', '8', '9', '10', '11'],
'Feature3': [12, 13, 14, 15, 16, 17, 15, 12, 13, 23]})
得到3个数据框,如下:
连接数据框Concatenate DataFrames
如果只是简单的连接两个数据框的行的话,直接调用concat()方法即可
df_row = pd.concat([df1, df2])
df_row
可以看到,数据框df1和df2就以行连接在一起了,但是你注意到没,此时数据框的索引有问题,我们想要的索引应该自动给我们填好才对,这个时候我们需要将ignore_index参数设置为True。
df_row = pd.concat([df1, df2], ignore_index=True)
这个时候索引就正确了。
有时候,你虽然连接了2个数据框,但是你还是想知道新数据框的数据分别来自哪个数据框,这个时候调用keys参数就可以,例如,我们在上面的例子中将来自df1的数据和df2的数据分别加上标签x,y。
df_keys = pd.concat([df1,df2], keys=['x', 'y'])
df_keys
可以看到,新数据框中哪些数据来自于哪个数据框一目了然。
同时,给新的数据框加上标签也有助于我们在新数据中切片出旧的数据框,例如
df_keys.loc['y']
通过以上代码,很容易在新数据框中切片出了df2。
在连接数据框时还有一个技巧,就是将数据框以字典值的形式传递给 concat(),可以在连接的新数据框中自动加上标签,这个标签就是字典的键。看下例:
df_piece = pd.concat({'第一个框':df1,'第二个框':df2})
df_piece
有没有很好使?
concat()函数也可以横向连接数据框,只需要将axis设置为1即可
df_col = pd.concat([df1,df2], axis=1)
df_col
可以看到这个就是横向连接。
合并数据框Merge DataFrames
我们看一下如何将df_row(由df1和df2连接后得到,见之前的例子)和df3以共同的id为基础合并起来。
df_merge_col = pd.merge(df_row, df3, on='id')
df_merge_col
此时,我们注意到id等于1的行出现了2次,是因为在df_row中是有2个id等于1的,而在df3中id等于1只有一次,所以合并后的feature3都是12。
还有一种情况是你要合并的2个数据框没有一样名字的列,需要你指定,这个时候就要用到left_on,right_on参数了。
df_merge_difkey = pd.merge(df_row, df3, left_on='id', right_on='id')
df_merge_difkey
此例中我们左右数据框都指定以id为基础进行合并。
还有一种情况是,你想给原先的数据框加一行新数据,看下例:
add_row = pd.Series(['10', 'X1', 'X2', 'X3'],
index=['id','Feature1', 'Feature2', 'Feature3'])
df_add_row = df_merge_col.append(add_row, ignore_index=True)
df_add_row
可以看到,通过append可以给一个数据框加上一个新的series。
不同的合并逻辑Outer,Inner,Right,Left与index
Outer合并会将两个数据库的所有数据都合并,相当于取原来数据库的并集形成一个新的数据库。
df_outer = pd.merge(df1, df2, on='id', how='outer')
df_outer
可以看到,这种合并方法,生成的新数据集中会有很多NaN的值,还有,需要注意的是这种方法会自动将相同列名加上后缀,而且这个后缀是可以改的,看下例:
df_suffix = pd.merge(df1, df2, left_on='id',right_on='id',how='outer',suffixes=('_left','_right'))
df_suffix
可以看到suffixes参数可以修改后缀。
Inner合并生成的新数据集中只会有原来2个数据集中都有的数据,相当于取了两个数据框的交集。
df_inner = pd.merge(df1, df2, on='id', how='inner')
df_inner
相应的,Right,和Left就是分别以第二个和第一个数据框中的变量为基准进行数据框的合并,大家也可以试试。有时候,我们会根据2个数据框的index来合并,此时,只需要将right_index,left_index两个参数设置为True即可。看下面例子:
df_index = pd.merge(df1, df2, right_index=True, left_index=True)
df_index
结论
好了,今天给大家介绍了concat() 和 merge()合并数据框的用法,希望对大家有帮助。感谢大家耐心看完。发表这些东西的主要目的就是督促自己,希望大家关注评论指出不足,一起进步。内容我都会写的很细,用到的数据集也会在原文中给出链接,你只要按照文章中的代码自己也可以做出一样的结果,一个目的就是零基础也能懂,因为自己就是什么基础没有从零学Python的,加油。
(站外链接发不了,请关注后私信回复“数据链接”获取本头条号所有使用数据)
往期精彩:
相关推荐
- PHPMAILER实现PHP发邮件功能php实例
-
这篇文章主要为大家详细介绍了PHPMAILER实现PHP发邮件功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下本文实例为大家分享了PHPMAILER实现PHP发邮件功能的具体代码,供大家参考,具...
- Cacti监控服务器配置教程(基于CentOS+Nginx+MySQL+PHP环境搭建)
-
具体案例:局域网内有两台主机,一台Linux、一台Windows,现在需要配置一台Cacti监控服务器对这两台主机进行监控环境说明:1、Linux主机操作系统:CentOS6.2IP地址:192.1...
- 如何在webmin中配置多个PHP版本_怎么配置php
-
请关注本头条号,每天坚持更新原创干货技术文章。如需学习视频,请在微信搜索公众号“智传网优”直接开始自助视频学习1.前言如何在webmin中配置多个PHP版本?本教程将会给您一些启示和操作案例。Web...
- 详解Drupal安装步骤_drools安装
-
DrupalDrupal是一个基于PHP语言编写的开源的内容管理系统(CMS:ContentManagementSystem),和Wordpress等CMS一样提供主题。在这里详细介绍一下安装Dr...
- nternet 信息服务(IIS) 升级为IIS 6.0
-
WindowsServer2003中Internet信息服务(IIS)升级为IIS6.0,其安全性更高。默认情况下,WindowsServer2003没有安装IIS6.0,要通过...
- Php JIT 使用详解_php的!
-
简介PHP8引入的JIT(Just-In-Time编译器)是该版本的一个重要性能特性,首次让PHP有了运行时即时编译的能力,从解释型语言迈向了“编译执行”的方向。什么是JIT?JIT...
- php 常见配置详解_php cgi配置
-
以下是PHP常见的配置项及其含义:error_reporting:设置错误报告级别,可以控制PHP显示哪些错误。例如,设置为E_ALL将显示所有错误,而设置为0将禁止显示任何错误。displa...
- 技巧:PHP版本怎样隐藏在Linux服务器
-
通常情况下,大多数安装web服务器软件的默认设置存在信息泄露,这些软件其中之一就是PHP。PHP是如今最流行的服务端html嵌入式语言之一。而在如今这个充满挑战的时代,有许多黑客会尝试发现你服务端的漏...
- PHP八大安全函数解析_php安全设置
-
在现代互联网中,我们经常要从世界各地的用户中获得输入数据。但是,我们都知道“永远不能相信那些用户输入的数据”。所以在各种的Web开发语言中,都会提供保证用户输入数据安全的函数。在PHP中,有些非常有...
- win7下apache+mysql+php安装配置_win7 mysql安装配置教程
-
一.首先下载好要用的apache版本:http://httpd.apache.org/download.cgimysql版本:http://dev.mysql.com/downloads/mys...
- phpmyadmin取消最大文件限制的更改解决方法
-
用phpmyadmin导入大数据库的时候出现:Nodatawasreceivedtoimport.Eithernofilenamewassubmitted,orthefi...
- 成功安装 Magento2.4.3最新版教程「技术干货」
-
外贸独立站设计公司xingbell.com经过多次的反复实验,最新版的magento2.4.3在oneinstack的环境下的详细安装教程如下:一.vps系统:LinuxCentOS7.7.19...
- CentOS、Nginx、PHP、MySQL的安装和配置记录
-
安装LNMP安装wget工具(可选) yuminstall-ywget下载Nginx wgethttp://www.atomicorp.com/installers/ato...
- PHP扩展开发之路(二)_php扩展直接执行php代码
-
昨日,Jamlee发布了PHP扩展开发之路(一),今日再来续集,哈哈,会不会更有趣呢!不说多的,直接来!##0x2helloworld!,你的第一个php扩展##阅读前必看小贴士:如果你不想在本...
- 比较常见类型漏洞讲解(一)_常见漏洞的特点及危害
-
这里介绍一些手动挖掘漏洞时比较容易找到的漏洞,根据不同类型的漏洞来介绍。演示准备目标主机:Metasploitable2攻击目标:目标主机的dvwa系统攻击机:KaliSessionId盗用不知道你们...
- 一周热门
-
-
【验证码逆向专栏】vaptcha 手势验证码逆向分析
-
Python实现人事自动打卡,再也不会被批评
-
Psutil + Flask + Pyecharts + Bootstrap 开发动态可视化系统监控
-
一个解决支持HTML/CSS/JS网页转PDF(高质量)的终极解决方案
-
再见Swagger UI 国人开源了一款超好用的 API 文档生成框架,真香
-
网页转成pdf文件的经验分享 网页转成pdf文件的经验分享怎么弄
-
C++ std::vector 简介
-
飞牛OS入门安装遇到问题,如何解决?
-
系统C盘清理:微信PC端文件清理,扩大C盘可用空间步骤
-
10款高性能NAS丨双十一必看,轻松搞定虚拟机、Docker、软路由
-
- 最近发表
- 标签列表
-
- python判断字典是否为空 (50)
- crontab每周一执行 (48)
- aes和des区别 (43)
- bash脚本和shell脚本的区别 (35)
- canvas库 (33)
- dataframe筛选满足条件的行 (35)
- gitlab日志 (33)
- lua xpcall (36)
- blob转json (33)
- python判断是否在列表中 (34)
- python html转pdf (36)
- 安装指定版本npm (37)
- idea搜索jar包内容 (33)
- css鼠标悬停出现隐藏的文字 (34)
- linux nacos启动命令 (33)
- gitlab 日志 (36)
- adb pull (37)
- python判断元素在不在列表里 (34)
- python 字典删除元素 (34)
- vscode切换git分支 (35)
- python bytes转16进制 (35)
- grep前后几行 (34)
- hashmap转list (35)
- c++ 字符串查找 (35)
- mysql刷新权限 (34)