美文网首页人工智能通识
【编程】8行Python代码实现excel两个sheet表合并

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

作者: zhyuzh3d | 来源:发表于2020-03-29 17:02 被阅读0次

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


问题分析

怎么把两个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

相关文章

网友评论

    本文标题:【编程】8行Python代码实现excel两个sheet表合并

    本文链接:https://www.haomeiwen.com/subject/ayduuhtx.html