歡迎關(guān)注我的專欄( つ??ω??)つ【人工智能通識(shí)】
問題分析
怎么把兩個(gè)sheet表的數(shù)據(jù)合并到一起?
先看問題。我們的excel文件有兩個(gè)個(gè)sheet表,a和b。
這里存在著一些情況:
- 橫向看,a和b里面的name人名有交疊也有互補(bǔ)。a里面7個(gè)人有Kaylin,b里面沒有;b里面7個(gè)人有Gracie,a里面沒有。
- 豎向看,a和b里面的欄目也有交疊和互補(bǔ)。a里是name,height,weight,age,b里面是name,age,bmi,fitness。
我們期望的結(jié)果是下圖這樣,把a(bǔ)和b以name為索引,a和b對(duì)應(yīng)合并成一張8個(gè)人的表。
可能方法
- 直接Excel自帶的【數(shù)據(jù)-合并計(jì)算】工具,可以實(shí)現(xiàn)多個(gè)表的合并,并且能夠?qū)χ貜?fù)的列(比如a和b都有age列)進(jìn)行求和計(jì)算。但缺點(diǎn)是不能處理字符串文字?jǐn)?shù)據(jù),fitness一列會(huì)丟失。
使用Excle配套的power query工具,可以使用VBA編程實(shí)現(xiàn)這個(gè)效果。缺點(diǎn)微軟沒有為蘋果mac下的excel提供這個(gè)工具,此外使用這個(gè)工具還要學(xué)習(xí)VB語法和SQL語法,也不容易。
使用Python的pandas來處理,功能足夠強(qiáng)大,語法也簡(jiǎn)單。
使用Notebook的Pandas
先把數(shù)據(jù)讀進(jìn)來看一下。sheet_name參數(shù)指定讀哪個(gè)表。
同樣讀取b表看看。
使用merge把兩個(gè)表合并到一起,on是指定索引列名稱,how='left'是以a表為基礎(chǔ),indicator是顯示_merge列的情況。
注意到出了兩個(gè)age列,age_x和age_y。重建新的age列,優(yōu)先使用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')
歡迎關(guān)注我的專欄( つ??ω??)つ【人工智能通識(shí)】
每個(gè)人的智能新時(shí)代
如果您發(fā)現(xiàn)文章錯(cuò)誤,請(qǐng)不吝留言指正;
如果您覺得有用,請(qǐng)點(diǎn)喜歡;
如果您覺得很有用,歡迎轉(zhuǎn)載~
END