首页 > 解决方案 > 使用 pandas 和 numpy 只返回有差异的行

问题描述

我已经构建了一个脚本,它使用两个 Excel 工作表(Sheet1、Sheet2)作为数据框(df1、df2)并在另一个工作表(结果)中返回更新的 df1,概述了两个工作表之间的差异。

我试图找到一种方法来只返回有差异的行。

比较.py

import pandas as pd
import numpy as np

filename = 'SAMPLE FILE.xlsx'

df1 = pd.read_excel(filename, 'Sheet1')
df2 = pd.read_excel(filename, 'Sheet2')

writer = pd.ExcelWriter(filename, engine = 'xlsxwriter')
df1.to_excel(writer, sheet_name = 'Sheet1',index=False,header=True)
df2.to_excel(writer, sheet_name = 'Sheet2',index=False,header=True)


rows, cols = np.where(np.not_equal(df1, df2))

df3 = pd.DataFrame()

for cell in zip(rows, cols):
    df1.iloc[cell[0], cell[1]] = ' {} -> {} '.format(df1.iloc[cell[0], cell[1]], df2.iloc[cell[0], cell[1]])
    df3 = df3.append(df1.iloc[cell[0]])[df1.columns]

df3.to_excel(writer,sheet_name='Results', index=False, header=True)
writer.save()

我得到的结果与我正在寻找的结果

在此处输入图像描述

编辑:我编辑了我的帖子以提供正确的解决方案

标签: pythonpandasnumpy

解决方案


不要比较.values,而是使用df.equals,它返回一个布尔值,这可能是您是否将其拉入最终数据帧的约束。


推荐阅读