Python 比较两个excel文件并返回非公用行
我有两个excel文件,如下-Python 比较两个excel文件并返回非公用行,python,excel,pandas,list,Python,Excel,Pandas,List,我有两个excel文件,如下- File1.xlsx File2.xlsx 我想比较每一行和每一列,并从这两个文件中删除公共行(列标题除外)。输出应如下所示- File1.xlsx File2.xlsx 我的代码- import pandas from datetime import datetime import numpy df = pandas.read_excel('File1.xlsx') FORMAT = ['col1','col2','col3'] df_selecte
File1.xlsx
File2.xlsx
我想比较每一行和每一列,并从这两个文件中删除公共行(列标题除外)。输出应如下所示-
File1.xlsx
File2.xlsx
我的代码-
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:无法删除数组元素
请提供帮助。您可以尝试此解决方案。它将为您提供所需的结果
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\u csv()。但它会给出同样的结果
我认为pandas.merge在这里很有用,然后再查找_merge字段<代码>导入熊猫为pd left=pd.DataFrame([[1,2],[3,4]],columns=list('AB'))right=pd.DataFrame([[1,2],[7,4]],columns=list('AB'))merge=pd.merge(left,right,how=“outer”,on=['A','B'],indicator=True)@simpleApp您可以缩进代码并解释您的解决方案吗。谢谢。我想你们都准备好了。请让我知道,如果你需要任何额外的支持。干杯嘿,谢谢你的尝试,虽然我得到了两个文件的所有行和列并排放置在两个修改过的文件中。重复项和非重复项都显示出来了。嘿@sandy,我已经修改了答案。你能试试吗现在它显示每个文件中正确的列数,但仍然显示每个文件中的所有行,重复数据消除没有发生。啊……在代码中做了最后一轮更新……我想这次应该可以了……你可以检查temp_df列,它是组合数据帧,没有任何错误duplicates@sandy ... 我确实创建了2个与您的数据相似的csv文件,并添加了一些快照以供参考。另外,请检查我在阅读时添加了dayfirst参数。。。。检查这个有用的url