【编程】8行Python代码实现excel两个sheet表合并

欢迎关注我的专栏( つ•̀ω•́)つ【人工智能通识】


问题分析

怎么把两个sheet表的数据合并到一起?
先看问题。我们的excel文件有两个个sheet表,a和b。

这里存在着一些情况:

  • 横向看,a和b里面的name人名有交叠也有互补。a里面7个人有Kaylin,b里面没有;b里面7个人有Gracie,a里面没有。
  • 竖向看,a和b里面的栏目也有交叠和互补。a里是name,height,weight,age,b里面是name,age,bmi,fitness。

我们期望的结果是下图这样,把a和b以name为索引,a和b对应合并成一张8个人的表。

可能方法

  • 直接Excel自带的【数据-合并计算】工具,可以实现多个表的合并,并且能够对重复的列(比如a和b都有age列)进行求和计算。但缺点是不能处理字符串文字数据,fitness一列会丢失。
  • 使用Excle配套的power query工具,可以使用VBA编程实现这个效果。缺点微软没有为苹果mac下的excel提供这个工具,此外使用这个工具还要学习VB语法和SQL语法,也不容易。

  • 使用Python的pandas来处理,功能足够强大,语法也简单。

使用Notebook的Pandas

先把数据读进来看一下。sheet_name参数指定读哪个表。

同样读取b表看看。

使用merge把两个表合并到一起,on是指定索引列名称,how='left'是以a表为基础,indicator是显示_merge列的情况。

注意到出了两个age列,age_x和age_y。重建新的age列,优先使用age_y的值,如果是空NaN就是使用age_x的8。

最后drop删除掉age_x和age_y两列,保存即可。

汇总所有代码共8行:

import pandas as pd
import numpy as np
df1 = pd.read_excel('./orgdata.xlsx', sheet_name='a', index_col=0)
df2 = pd.read_excel('./orgdata.xlsx', sheet_name='b', index_col=0)
df = pd.merge(df1, df2, on='name', how='left')
df['age'] = df.apply(lambda x: x['age_x']if pd.isna(x['age_y']) else x['age_y'],axis=1)
df = df.drop(columns=['age_x', 'age_y'])
df.to_excel('data.xls')

欢迎关注我的专栏( つ•̀ω•́)つ【人工智能通识】


每个人的智能新时代

如果您发现文章错误,请不吝留言指正;
如果您觉得有用,请点喜欢;
如果您觉得很有用,欢迎转载~


END

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • pyspark.sql模块 模块上下文 Spark SQL和DataFrames的重要类: pyspark.sql...
    mpro阅读 13,214评论 0 13
  • --- layout: post title: "如果有人问你关系型数据库的原理,叫他看这篇文章(转)" date...
    蓝坠星阅读 4,290评论 0 3
  • 大多数JAVA程序猿都选择使用POI或者HSSFWorkbook等第三方类库来实现Excel自动化合并,这样一来不...
    小黄鸭呀阅读 4,563评论 0 0
  • 今天是什么日子 起床:7:30 就寝:预计23:00 天气:阴 心情:可以 纪念日: 任务清单 今日完成的任务,最...
    雪山牧场阅读 1,207评论 0 5
  • 许多时候我们会面临抉择。 而这抉择很多是二选一,甚至是只有一个选择。 开始的时候选择什么,那么结局基本可以预见。 ...
    无名氏_104a阅读 1,004评论 0 2

友情链接更多精彩内容