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 之间的差异的工具。它可以根据需要保留形状和相同值,支持按行或按列对齐,适用于数据审计、版本控制等场景。对于需要高频比较的场景,建议结合其他方法或库以提高性能。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐