【问题标题】:Using pandas and numpy to return only the rows with the differences使用 pandas 和 numpy 只返回有差异的行
【发布时间】:2021-09-06 15:53:29
【问题描述】:

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

我正在尝试找到一种方法来仅返回存在差异的行。

compare.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()

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

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

【问题讨论】:

  • 你能分享一个数据样本吗?
  • 结果中的前几行可以用作样本。只需在 Sheet2 中的任何单元格中进行更改

标签: python pandas numpy


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    使用np.where(np.not_equal(df1, df2)) 获得正确的解决方案

    【讨论】:

      猜你喜欢
      • 2014-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-21
      • 2013-09-18
      • 1970-01-01
      • 2015-08-07
      相关资源
      最近更新 更多