亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

試圖通過 python 和 pandas 比較 2 個 excel 文件

試圖通過 python 和 pandas 比較 2 個 excel 文件

慕斯王 2022-06-02 15:37:55
背景:我有 2 個文件,匹配的列很少,它們之間有一個共同的列用于比較。例子:Table 1 , about 10K rows| col1 | col2 | col3 ||------|------|------|| adam | key1 | def  || mike | key2 | efg  |Table 2 , about 5k rows| col1 | col2 | col3 | col4 ||------|------|------|------|| adam | key1 | def  | abc  || mike | key2 |      | cdf  |現在我正在嘗試從第一個文件中獲取數據,將其與第二個文件進行比較,如果不同,則創建一個新文件以從第一個文件中獲取完整的行。所以在上面的例子中,以第一列作為比較列,對于 adam,col1、2、3 是相同的,所以不需要更新記錄。對于 mike,col2 值將是相同的,但 col3 具有不同的值,因此它將成為更新文件的一部分。我正在使用 python,這目前太基礎了,我似乎找不到更有效的方法df_1 = pd.read_excel("file1.xlsx")df_2 = pd.read_excel("file2.xlsx")df_1 = df_1.fillna('')df_2 = df_2.fillna('')df_3 = pd.DataFrame()for i in range(0, len(df_1.index)):    for j in range(0,len(df_2.index)):        if(df_1[col1].iloc[i] == df_2[col1].iloc[j]):            flag = 0            if(df_1[col2].iloc[i] != df_2[col2].iloc[j]): flag = 1            if(df_1[col3].iloc[i] != df_2[col3].iloc[j]): flag = 1            if(flag): df_3 = df_3.append(df_1.iloc[[i]])            break;writer = ExcelWriter("update.xlsx")df_3.to_excel(writer,index=False,header=True)我嘗試了一些類似下面的變體,嘗試使用 col1 值在公共行上使用匹配行,然后檢查其他兩列值是否相同或不同并返回,但它不返回所有必需的數據df_3 = df_1[(            df_1['col1'].isin(df_2['col1']) &                 (~df_1['col2'].isin(df_2['col2'])                 | ~df_1['col3'].isin(df_2['col3'])                 )             )]輸出:   col1  col2 col30  mike  key2  efg   
查看完整描述

1 回答

?
12345678_0001

TA貢獻1802條經驗 獲得超5個贊

IIUC,使用pandas.DataFrame.update:


鑒于:


# df1

   col1  col2 col3

0  adam  key1  def

1  mike  key2  efg

# df2

   col1  col2 col3 col4

0  adam  key1  def  abc

1  mike  key2       cdf



new_df = df1.set_index('col1')

new_df.update(df2.set_index('col1'))

new_df.reset_index(inplace=True)

print(new_df)

輸出:


   col1  col2 col3

0  adam  key1  def

1  mike  key2     

要獲取更新的行(處于其原始狀態):


df1[(new_df != df1).any(1)]

輸出:


   col1  col2 col3

1  mike  key2  efg


查看完整回答
反對 回復 2022-06-02
  • 1 回答
  • 0 關注
  • 366 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號