欢迎关注我的专栏( つ•̀ω•́)つ【人工智能通识】
问题分析
怎么把两个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