首页 > 解决方案 > 比较两个excel文件并返回不常见的行

问题描述

我有两个如下的 excel 文件
- File1.xlsx File2.xlsx
文件 1

文件2

我想比较每一行和每一列,并消除两个文件中的共同行(列标题除外)。输出应如下所示 -
File1.xlsx File2.xlsx
文件 3

文件4

我的代码-

import pandas
from datetime import datetime
import numpy


df = pandas.read_excel('File1.xlsx')
FORMAT = ['col1','col2','col3']
df_selected = df[FORMAT]

df2 = pandas.read_excel('File2.xlsx')
FORMAT2 = ['col1','col2','col3']
df_selected2 = df2[FORMAT2]



def compare(row1,row2):
    # print(row1,row2)
    flag = False
    i = 0
    for t1, t2 in zip(row1, row2):

        #if it is first value
        #check dates

        if(i==0):
            formattedDT = datetime.strptime(t1, '%d-%b-%Y')

            if(formattedDT!=t2):
                flag = True
                break
        elif(t1!=t2):
            flag = True
            break

        i=i+1

    if(flag is False):
        return 'matched'
    else:
        return 'mismatched'    


def iterate(array1, array2):
    result = array1
    for index, row1 in enumerate(array1):
        for row2 in array2:
            if(compare(row1,row2)=='matched'):
                del result[index]
                break
    df = pandas.DataFrame(result)
    df.columns=['col1','col2','col3']
    writer = pandas.ExcelWriter('output.xlsx', engine='xlsxwriter')
    df.to_excel(writer, sheet_name='welcome', index=False)
    writer.save()    
                



iterate(df_selected.values,df_selected2.values)

但我收到此错误输出
- ValueError: cannot delete array elements

请帮忙。

标签: pythonexcelpandaslist

解决方案


你可以试试这个解决方案。它应该会给你想要的结果

df1 =pd.read_excel('File1.xlsx',parse_dates=['col1'],sep='\t')
df2 = pd.read_excel('File2.xlsx',parse_dates=['col1'],sep='\t',dayfirst=True)
temp_df = pd.concat([df1,df2])
temp_df.reset_index(inplace=True,drop=True)
temp_df.drop_duplicates(subset=['col1','col2','col3'], keep=False, inplace=True)

final_df1 = pd.merge(df1, temp_df, how='inner', on=['col1','col2','col3'])
final_df2 = pd.merge(df2, temp_df, how='inner', on=['col1','col2','col3'])

final_df1.to_excel('file_1_modified.xlsx',index=False)
final_df2.to_excel('file_2_modified.xlsx',index=False)

下面是我的结果的快照。请注意我已经从 csv 文件中读取了..所以我在我的快照上使用了 pd.read_csv()。但它会给出相同的结果 第一张图片 第二张图片 第三张图片 第四张图片


推荐阅读