pandas.DataFrame.compare#

DataFrame.compare(other, align_axis=1, keep_shape=False, keep_equal=False, result_names=('self', 'other'))[源代码][源代码]#

与另一个 DataFrame 进行比较并显示差异。

参数:
其他DataFrame

要比较的对象。

align_axis{0 或 ‘index’, 1 或 ‘columns’}, 默认 1

确定在哪个轴上对齐比较。

  • 0, 或 ‘index’结果差异垂直堆叠

    从 self 和 other 中交替绘制行。

  • 1, 或 ‘列’结果差异是水平对齐的

    从 self 和 other 中交替绘制列。

keep_shapebool, 默认 False

如果为真,所有行和列都会被保留。否则,只有值不同的行和列会被保留。

keep_equalbool, 默认 False

如果为真,结果会保留相等的值。否则,相等的值会显示为 NaNs。

result_namestuple, 默认 (‘self’, ‘other’)

在比较中设置数据框的名称。

Added in version 1.5.0.

返回:
DataFrame

显示差异并排堆叠的 DataFrame。

生成的索引将是一个带有 ‘self’ 和 ‘other’ 交替堆叠在内层的多级索引。

引发:
ValueError

当两个DataFrame没有相同的标签或形状时。

参见

Series.compare

与另一个系列进行比较并显示差异。

DataFrame.equals

测试两个对象是否包含相同的元素。

注释

匹配的 NaNs 不会显示为差异。

只能比较标签相同的(即形状相同、行和列标签完全相同)的 DataFrame

示例

>>> df = pd.DataFrame(
...     {
...         "col1": ["a", "a", "b", "b", "a"],
...         "col2": [1.0, 2.0, 3.0, np.nan, 5.0],
...         "col3": [1.0, 2.0, 3.0, 4.0, 5.0]
...     },
...     columns=["col1", "col2", "col3"],
... )
>>> df
  col1  col2  col3
0    a   1.0   1.0
1    a   2.0   2.0
2    b   3.0   3.0
3    b   NaN   4.0
4    a   5.0   5.0
>>> df2 = df.copy()
>>> df2.loc[0, 'col1'] = 'c'
>>> df2.loc[2, 'col3'] = 4.0
>>> df2
  col1  col2  col3
0    c   1.0   1.0
1    a   2.0   2.0
2    b   3.0   4.0
3    b   NaN   4.0
4    a   5.0   5.0

将差异对齐到列

>>> df.compare(df2)
  col1       col3
  self other self other
0    a     c  NaN   NaN
2  NaN   NaN  3.0   4.0

分配 result_names

>>> df.compare(df2, result_names=("left", "right"))
  col1       col3
  left right left right
0    a     c  NaN   NaN
2  NaN   NaN  3.0   4.0

将差异堆叠在行上

>>> df.compare(df2, align_axis=0)
        col1  col3
0 self     a   NaN
  other    c   NaN
2 self   NaN   3.0
  other  NaN   4.0

保持相等的值

>>> df.compare(df2, keep_equal=True)
  col1       col3
  self other self other
0    a     c  1.0   1.0
2    b     b  3.0   4.0

保持所有原始行和列

>>> df.compare(df2, keep_shape=True)
  col1       col2       col3
  self other self other self other
0    a     c  NaN   NaN  NaN   NaN
1  NaN   NaN  NaN   NaN  NaN   NaN
2  NaN   NaN  NaN   NaN  3.0   4.0
3  NaN   NaN  NaN   NaN  NaN   NaN
4  NaN   NaN  NaN   NaN  NaN   NaN

保持所有原始行和列,以及所有原始值

>>> df.compare(df2, keep_shape=True, keep_equal=True)
  col1       col2       col3
  self other self other self other
0    a     c  1.0   1.0  1.0   1.0
1    a     a  2.0   2.0  2.0   2.0
2    b     b  3.0   3.0  3.0   4.0
3    b     b  NaN   NaN  4.0   4.0
4    a     a  5.0   5.0  5.0   5.0