pandas
库中的 compare()
方法用于比较两个 DataFrame
或 Series
对象之间的差异。它可以帮助你找出两组数据中的哪些行或单元格发生了变化。compare()
方法在版本 1.1.0 中引入,适用于需要比较两个数据集的场景,尤其是在数据审计或版本控制中非常有用。
基本语法
DataFrame.compare(other, align_axis=1, keep_shape=False, keep_equal=False)
参数说明
-
other:
需要与之比较的DataFrame
或Series
对象。 -
align_axis:
指定输出结果的对齐方式。支持的值为0
或'index'
(按行对齐)和1
或'columns'
(按列对齐)。默认为1
(按列对齐)。 -
keep_shape:
布尔值,默认为False
。如果为True
,则结果将保留与输入DataFrame
相同的形状,差异部分将用NaN
填充。 -
keep_equal:
布尔值,默认为False
。如果为True
,则在结果中保留相同值的行或单元格。
返回值
compare()
方法返回一个新的 DataFrame
,其中包含两个输入 DataFrame
或 Series
之间的差异。结果中的每一列表示一个 DataFrame
或 Series
的值,后缀 _self
表示原 DataFrame
或 Series
,后缀 _other
表示 other
DataFrame
或 Series
。
示例代码
示例 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
注意事项
-
数据类型一致性:
compare()
方法要求两个DataFrame
或Series
的数据类型一致,否则可能会引发错误。 -
形状一致性: 如果
keep_shape=False
(默认),则结果只包含差异部分,如果keep_shape=True
,则结果会保留输入DataFrame
或Series
的形状,差异部分用NaN
填充。 -
索引对齐:
compare()
方法会自动对齐索引,确保比较的是相同位置的值。如果索引不一致,可能会导致比较结果不符合预期。 -
性能: 对于大规模数据集,
compare()
方法的性能可能较差。如果需要频繁比较数据,建议使用其他更高效的方法或库。
总结
compare()
方法是 pandas
中用于比较两个 DataFrame
或 Series
之间的差异的工具。它可以根据需要保留形状和相同值,支持按行或按列对齐,适用于数据审计、版本控制等场景。对于需要高频比较的场景,建议结合其他方法或库以提高性能。