百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术分类 > 正文

Pandas处理Excel之合并表格的方法

ztj100 2025-02-18 14:24 28 浏览 0 评论

当在数据分析或数据处理过程中,可能需要合并表格以获得更完整的信息或更好的洞察。在Pandas库中,concat()和merge()是两个常用的函数,用于将多个数据帧(DataFrame)或序列(Series)组合在一起。它们的主要区别在于它们的用途和合并方式。

concate:函数是用于拼接两个或多个DataFrame或Series对象沿着行或列的方向。这个函数可以用于简单的数据拼接,也可以用于复杂的数据处理任务。

Bash
df = pd.concat(objs, axis=0, join='outer', ignore_index=False, 
        keys=None, levels=None, names=None, verify_integrity=False, 
        sort=None, copy=True) 

(1)objs:对象,一般为df或者series

(2)axis:拼接方向,默认为0,行拼接,若axis=1,则为列拼接

(3)join:默认为outer表示并集,inner表示交集, left/right表示左右连接

(4)ignore_index=True:重建索引

(5)keys:创建层次化索引

(a)两张表列数一致,只是需要将行数简单拼接时:pd.concat([df1,df2]),效果df1.append(df2)。

(b)两张表行数一致,只需要列简单拼接时:pd.concate([df1,df2],axis=1),效果pd.merge(df1,df2,left_index=True,right_index=True,how=‘outer’)。

(c)两张表按行拼接,只想保留列索引相同的列,则how=‘inner’。

(d)两张表按列拼接,只想保留行索引相同的行,则how=‘inner’。

下面是一些concat()函数的使用示例和总结:

  1. 沿着行方向拼接DataFrame

如果想要沿着行方向将两个DataFrame对象拼接在一起,可以使用concat()函数,如下所示:

Bash
import pandas as pd  
  
df1 = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})  
df2 = pd.DataFrame({'A': [5, 6], 'B': [7, 8]})  
concated_df = pd.concat([df1, df2])  
print(concated_df)

这将会在两个DataFrame之间进行行拼接,输出的结果如下:

    A  B  
0  1  3  
1  2  4  
0  5  7  
1  6  8
  1. 沿着列方向拼接DataFrame

如果想要沿着列方向将两个DataFrame对象拼接在一起,可以通过设置axis=1来实现,如下所示:

import pandas as pd  
  
df1 = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})  
df2 = pd.DataFrame({'A': [5, 6], 'B': [7, 8]})  
concated_df = pd.concat([df1, df2], axis=1)  
print(concated_df)

这将会在两个DataFrame之间进行列拼接,输出的结果如下:

    A  B  A  B  
0  1  3  5  7  
1  2  4  6  8
  1. 使用 ignore_index 参数更改索引

如果想要在拼接之后更改DataFrame的索引,可以使用ignore_index参数,如下所示:

import pandas as pd  
  
df1 = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})  
df2 = pd.DataFrame({'A': [5, 6], 'B': [7, 8]})  
concated_df = pd.concat([df1, df2], ignore_index=True)  
print(concated_df)

这将会在拼接之后重设DataFrame的索引,输出的结果如下:

   A  B
0  1  3
1  2  4
2  5  7
3  6  8

merge:merge()函数来合并两个表格。merge()函数的基本语法如下:

merge(left, right, how='inner', on=None, 
      left_on=None, right_on=None, 
      left_index=False, right_index=False, 
      sort=True, suffixes=('_x', '_y'), copy=True, 
      indicator=False, 
      validate=None)

(1)left和right分别表示要合并的左右两个表格;

(2)how参数指定合并方式,包括内连接(inner)、左连接(left)、右连接(right)和外连接(outer);

(3)on参数指定用于合并的列名;left_on和right_on参数分别指定左右两个表格中用于合并的列名;

(4)left_index和right_index参数指定是否使用索引列进行合并;

(5)sort参数指定是否排序结果表格;

(6)suffixes参数指定左右两个表格重叠列名的后缀;

(7)copy参数指定是否复制原始数据;

(8)indicator参数指定是否添加指示符列;

(9)validate参数指定是否验证合并结果。

下面的例子将会详细说明如何使用:

首先,我们创建两个简单的DataFrame:

import pandas as pd  
  
# 创建第一个DataFrame  
df1 = pd.DataFrame({  
    'A': ['A0', 'A1', 'A2', 'A3'],  
    'B': ['B0', 'B1', 'B2', 'B3'],  
    'key': ['K0', 'K1', 'K0', 'K1']  
})  
  
# 创建第二个DataFrame  
df2 = pd.DataFrame({  
    'key': ['K0', 'K1'],  
    'C': ['C0', 'C1']  
})

默认情况下,merge()函数执行的是内连接(inner join):

merged = pd.merge(df1, df2, on='key')  
print(merged)

结果:

      A   B key   C  
0  A0  B0  K0  C0  
1  A1  B1  K1  C1  
2  A2  B2  K0  C0  
3  A3  B3  K1  C1

如果我们想执行左连接或右连接,我们可以设置how参数:

左连接:

merged = pd.merge(df1, df2, on='key', how='left')  
print(merged)

右连接:

merged = pd.merge(df1, df2, on='key', how='right')  
print(merged)

如果我们想根据多个键进行合并,我们可以传入一个键的列表给on参数:

merged = pd.merge(df1, df2, on=['key1', 'key2'])  
print(merged)

总结一下,concat()函数用于将多个数据帧或序列按照行或列的方向进行简单的拼接,而merge()函数用于将两个数据帧按照指定的列或索引进行合并。concat()函数保留所有输入对象的索引或列名,而merge()函数会根据合并的键连接行,并可能添加新的列来存储来自两个数据帧的值。

相关推荐

Vue3非兼容变更——函数式组件(vue 兼容)

在Vue2.X中,函数式组件有两个主要应用场景:作为性能优化,因为它们的初始化速度比有状态组件快得多;返回多个根节点。然而在Vue3.X中,有状态组件的性能已经提高到可以忽略不计的程度。此外,有状态组...

利用vue.js进行组件化开发,一学就会(一)

组件原理/组成组件(Component)扩展HTML元素,封装可重用的代码,核心目标是为了可重用性高,减少重复性的开发。组件预先定义好行为的ViewModel类。代码按照template\styl...

Vue3 新趋势:10 个最强 X 操作!(vue.3)

Vue3为前端开发带来了诸多革新,它不仅提升了性能,还提供了...

总结 Vue3 组件管理 12 种高级写法,灵活使用才能提高效率

SFC单文件组件顾名思义,就是一个.vue文件只写一个组件...

前端流行框架Vue3教程:17. _组件数据传递

_组件数据传递我们之前讲解过了组件之间的数据传递,...

前端流行框架Vue3教程:14. 组件传递Props效验

组件传递Props效验Vue组件可以更细致地声明对传入的props的校验要求...

前端流行框架Vue3教程:25. 组件保持存活

25.组件保持存活当使用...

5 个被低估的 Vue3 实战技巧,让你的项目性能提升 300%?

前端圈最近都在卷性能优化和工程化,你还在用老一套的Vue3开发方法?作为摸爬滚打多年的老前端,今天就把私藏的几个Vue3实战技巧分享出来,帮你在开发效率、代码质量和项目性能上实现弯道超车!一、...

绝望!Vue3 组件频繁崩溃?7 个硬核技巧让性能暴涨 400%!

前端的兄弟姐妹们五一假期快乐,谁还没在Vue3项目上栽过跟头?满心欢喜写好的组件,一到实际场景就频频崩溃,页面加载慢得像蜗牛,操作卡顿到让人想砸电脑。用户疯狂吐槽,领导脸色难看,自己改代码改到怀疑...

前端流行框架Vue3教程:15. 组件事件

组件事件在组件的模板表达式中,可以直接使用...

Vue3,看这篇就够了(vue3 从入门到实战)

一、前言最近很多技术网站,讨论的最多的无非就是Vue3了,大多数都是CompositionAPI和基于Proxy的原理分析。但是今天想着跟大家聊聊,Vue3对于一个低代码平台的前端更深层次意味着什么...

前端流行框架Vue3教程:24.动态组件

24.动态组件有些场景会需要在两个组件间来回切换,比如Tab界面...

前端流行框架Vue3教程:12. 组件的注册方式

组件的注册方式一个Vue组件在使用前需要先被“注册”,这样Vue才能在渲染模板时找到其对应的实现。组件注册有两种方式:全局注册和局部注册...

焦虑!Vue3 组件频繁假死?6 个奇招让页面流畅度狂飙 500%!

前端圈的朋友们,谁还没在Vue3项目上踩过性能的坑?满心期待开发出的组件,一到高并发场景就频繁假死,用户反馈页面点不动,产品经理追着问进度,自己调试到心态炸裂!别以为这是个例,不少人在电商大促、数...

前端流行框架Vue3教程:26. 异步组件

根据上节课的代码,我们在切换到B组件的时候,发现并没有网络请求:异步组件:...

取消回复欢迎 发表评论: