pandas数据比较——compare()方法

pandas 库中的 compare() 方法用于比较两个 DataFrameSeries 对象之间的差异。它可以帮助你找出两组数据中的哪些行或单元格发生了变化。compare() 方法在版本 1.1.0 中引入,适用于需要比较两个数据集的场景,尤其是在数据审计或版本控制中非常有用。

基本语法

DataFrame.compare(other, align_axis=1, keep_shape=False, keep_equal=False)

参数说明

  • other:
    需要与之比较的 DataFrameSeries 对象。

  • align_axis:
    指定输出结果的对齐方式。支持的值为 0'index'(按行对齐)和 1'columns'(按列对齐)。默认为 1(按列对齐)。

  • keep_shape:
    布尔值,默认为 False。如果为 True,则结果将保留与输入 DataFrame 相同的形状,差异部分将用 NaN 填充。

  • keep_equal:
    布尔值,默认为 False。如果为 True,则在结果中保留相同值的行或单元格。

返回值

compare() 方法返回一个新的 DataFrame,其中包含两个输入 DataFrameSeries 之间的差异。结果中的每一列表示一个 DataFrameSeries 的值,后缀 _self 表示原 DataFrameSeries,后缀 _other 表示 other DataFrameSeries

示例代码

示例 1:比较两个 DataFrame
import pandas as pd

# 创建两个 DataFrame
df1 = pd.DataFrame({
    'A': [1, 2, 3, 4],
    'B': [5, 6, 7, 8],
    'C': [9, 10, 11, 12]
})

df2 = pd.DataFrame({
    'A': [1, 2, 3, 5],
    'B': [5, 6, 7, 8],
    'C': [9, 10, 11, 13]
})

# 比较两个 DataFrame
result = df1.compare(df2)

print(result)

输出:

    A       C      
  self other self other
3   4     5  12    13
示例 2:保留形状和相同值
# 保留形状和相同值
result = df1.compare(df2, keep_shape=True, keep_equal=True)

print(result)

输出:

    A       B       C      
  self other self other self other
0   1     1   5     5   9     9
1   2     2   6     6  10    10
2   3     3   7     7  11    11
3   4     5   8     8  12    13
示例 3:按行对齐
# 按行对齐
result = df1.compare(df2, align_axis=0)

print(result)

输出:

   A  C
3  4  5
  12 13
示例 4:比较两个 Series
# 创建两个 Series
s1 = pd.Series([1, 2, 3, 4], name='vals')
s2 = pd.Series([1, 2, 4, 3], name='vals')

# 比较两个 Series
result = s1.compare(s2)

print(result)

输出:

  vals  vals
2    3     4
3    4     3

注意事项

  1. 数据类型一致性: compare() 方法要求两个 DataFrameSeries 的数据类型一致,否则可能会引发错误。

  2. 形状一致性: 如果 keep_shape=False(默认),则结果只包含差异部分,如果 keep_shape=True,则结果会保留输入 DataFrameSeries 的形状,差异部分用 NaN 填充。

  3. 索引对齐: compare() 方法会自动对齐索引,确保比较的是相同位置的值。如果索引不一致,可能会导致比较结果不符合预期。

  4. 性能: 对于大规模数据集,compare() 方法的性能可能较差。如果需要频繁比较数据,建议使用其他更高效的方法或库。

总结

compare() 方法是 pandas 中用于比较两个 DataFrameSeries 之间的差异的工具。它可以根据需要保留形状和相同值,支持按行或按列对齐,适用于数据审计、版本控制等场景。对于需要高频比较的场景,建议结合其他方法或库以提高性能。

### 使用 Beyond Compare 比较 Excel 文件 #### 打开 Beyond Compare 并创建新的表格比较会话 启动 Beyond Compare 后,在主界面选择“新建会话”,然后挑选“表格比较”。这一步骤能够初始化用于对比两个Excel文件的工作环境[^2]。 #### 导入待比较的 Excel 文件 在弹出的窗口中,通过点击左侧和右侧的浏览按钮分别加载需要进行对比的第一个和第二个Excel文档。确保所选文件版本正确无误以便获得精准的结果[^3]。 #### 配置选项以优化比较过程 根据具体需求调整设置参数,比如忽略空白字符差异、大小写敏感度等配置项来提高匹配精度并减少不必要的干扰信息。此环节对于获取清晰直观的对比结果至关重要[^1]。 #### 查看与分析比较结果 完成上述准备工作后,Beyond Compare 将自动执行两份电子表格之间的数据对照任务,并以可视化形式展示不同之处——相同部分通常显示为白色背景;而存在变动的地方则会被高亮标记出来方便识别。用户可以直接查看这些区别点或是进一步探索其细节。 #### 编辑或同步更改(可选) 如果发现某些单元格的内容有出入并且希望即时修正,则可以在保持当前视图不变的情况下直接双击目标位置进入编辑模式;另外还支持一键复制左/右方选定区域至另一侧实现快速更新操作。 ```python # Python 示例代码并非实际应用于 Beyond Compare 中, # 而是为了说明编程逻辑下如何处理类似的任务。 def compare_excel_files(file_path_1, file_path_2): import pandas as pd df1 = pd.read_excel(file_path_1) df2 = pd.read_excel(file_path_2) comparison_values = (df1.values == df2.values) | ((df1.isnull()) & (df2.isnull())) rows, cols = np.where(~comparison_values) if rows.size > 0: diff_locations = list(zip(rows, cols)) print(f"Differences found at locations: {diff_locations}") else: print("No differences found.") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值