【編程】8行Python代碼實(shí)現(xiàn)excel兩個(gè)sheet表合并

歡迎關(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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • pyspark.sql模塊 模塊上下文 Spark SQL和DataFrames的重要類: pyspark.sql...
    mpro閱讀 9,504評(píng)論 0 13
  • --- layout: post title: "如果有人問你關(guān)系型數(shù)據(jù)庫(kù)的原理,叫他看這篇文章(轉(zhuǎn))" date...
    藍(lán)墜星閱讀 824評(píng)論 0 3
  • 大多數(shù)JAVA程序猿都選擇使用POI或者HSSFWorkbook等第三方類庫(kù)來實(shí)現(xiàn)Excel自動(dòng)化合并,這樣一來不...
    小黃鴨呀閱讀 994評(píng)論 0 0
  • 今天是什么日子 起床:7:30 就寢:預(yù)計(jì)23:00 天氣:陰 心情:可以 紀(jì)念日: 任務(wù)清單 今日完成的任務(wù),最...
    雪山牧場(chǎng)閱讀 136評(píng)論 0 5
  • 許多時(shí)候我們會(huì)面臨抉擇。 而這抉擇很多是二選一,甚至是只有一個(gè)選擇。 開始的時(shí)候選擇什么,那么結(jié)局基本可以預(yù)見。 ...
    無名氏_104a閱讀 92評(píng)論 0 2