python - 使用 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()
我得到的结果与我正在寻找的结果
编辑:我编辑了我的帖子以提供正确的解决方案
解决方案
不要比较.values
,而是使用df.equals,它返回一个布尔值,这可能是您是否将其拉入最终数据帧的约束。
推荐阅读
- java - 如何用for循环求和字节数组?
- r - corrplot:如何不显示某些变量的 Cramer 的 V corr 系数
- spring - Hibernate LAZY 加载和 spring 的 UserDetails
- javascript - 角色未添加到成员
- sql - 根据另一列是否=特定字符串向表中添加列
- c# - 如何模拟返回接口的方法?
- android - 断言失败:第 4263 行第 12 行:'_debugLifecycleState != _ElementLifecycle.defunct':不正确。扑
- spring-boot - 如何在 Spring Boot 中使用 @Lazy 延迟加载 RabbitMQ 队列?
- spring-boot - 在 Spring Boot oauth impl 中,访问令牌和刷新令牌到期时间始终为 1199
- bazel - bazel的输出类型是什么?