程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

Python panda對比表格數據

編輯:Python

我需要對比兩個相似性很大的表格
結構性區別和內容性區別
新表格可能會莫名其妙多一行,可能會少一行,內容可能發生異常。

我借用網站其他人的解決思路(暫時沒有link,如果誰看到了的dm我,我將會把來源附上)

本人沒有cs背景,都是自己摸索找資源的。
先提前感謝大家了/(ㄒoㄒ)/~~

目前結構性區別有output已經ok並成功寫入新文件新的sheet
問題主要出現在把結構性差異排除後,對剩余的數據對比,看是否有內容性的差異

相關代碼如下:
import numpy as np
import pandas as pd
old=pd.read_excel(io=r'sample_old.xlsx',sheet_name='sheet1', na_values=['NA'])
new=pd.read_excel(io=r'Csample_nouveau.xlsx', sheet_name='sheet1', na_values=['NA'])
old['version'] = "old"
new['version'] = "new"

old_comptetotal=set(old['N_Compte'])
new_comptetotal=set(new['N_Compte'])
suppr_compte=old_comptetotal-new_comptetotal
ajoute_compte=new_comptetotal-old_comptetotal
print(suppr_compte)
print(ajoute_compte)

all_data=pd.concat([old,new],ignore_index=True)
changes=all_data.drop_duplicates(subset=old.columns,keep='last')
print(changes)

cpt_double=changes[changes['N_Compte'].duplicated()==True]['N_Compte'].tolist()
print(cpt_double)
double=changes[changes['N_Compte'].isin(cpt_double)]
print(double)

change_new=double[(double["version"]=="new")]
change_old=double[(double["version"]=="old")]
print(change_new)
print(change_old)

change_new=change_new.drop(["version"],axis=1)
change_old=change_old.drop(["version"],axis=1)
print(change_new)
print(change_old)

df_all_changes=pd.concat([change_new,change_old],axis='columns',keys=['old','new'],join='outer')
df_all_changes=df_all_changes.swaplevel(axis='columns')[change_new.columns[0:]]
print(df_all_changes)

後面沒有代碼了,因為我解決不了了

問題
最後print出來發現old和new沒有區別的行也被print了,我想去除沒有差異的那一行。
如圖我highlight部分,每一列名稱下的old new都是沒有差異的

但是我不可能單獨drop那一行,這是個樣本表格,真實表格很多數據,有差異的概率比較小,因此寫入新excel應該是有差異的那幾行以便於更改。

**我的解答思路和嘗試過的方法 **

我嘗試highlight diff,然後條件篩出有顏色的那一行,但是本人python知識淺薄,highlight出了difference但是那一行還在/(ㄒoㄒ)/~~。

我想要達到的結果
有沒有highlight不重要,我只要內容有差異的行,且格式是每個列名下有old 和new對比。這樣一眼看的出差異

如圖是我想要被寫入的樣子


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved