【问题标题】:Compare two dataframes比较两个数据帧
【发布时间】:2019-07-21 17:04:14
【问题描述】:

我有两个数据帧如下:我想逐行比较两个数据帧,如果假设 df1 的第 1 行不等于 df2 的第 1 行打印错误

df1

    A     B  
0   1     3
1   2     4 
2   3     5 
3   4     6 
4   5     7 

df2

    A     B  
0   1     3
1   2     4 
2   3     5 
3   4     5
4   5     7

我想为第 4 行打印一个错误,因为 df1 的变量“B”的值为 6,而 df1 的值为 5

【问题讨论】:

  • 您可以使用 (df1 == df2).all(1) 比较数据帧,预期输出是什么?

标签: python pandas dataframe


【解决方案1】:

你看过documentation吗?

df1.eq(df2)

      A      B
0  True   True
1  True   True
2  True   True
3  True  False
4  True   True

如果您想查看特定值和行,您可以这样做

df1[~df1.eq(df2)].dropna(how='all')

    A    B
3 NaN  6.0

【讨论】:

  • 我想为该行具有不相等值的每一行打印一个错误。所以在这种情况下,我们需要遍历每一行
  • 不,你不会逐行迭代 pandas 数据框,那是没有正确使用它
【解决方案2】:

我喜欢@ aws_appentice的答案。但是,由于您要求“打印错误”,请考虑@ 987654322 (docs),它将在Dataframe不相同并为您提供诊断输出时提高AssertionError 8.例外。

【讨论】:

    【解决方案3】:

    你应该在这里查看安迪·海登的答案:Outputting difference in two Pandas dataframes side by side - highlighting the difference

    您正在尝试做的事情(如果一行不同,则打印错误)可能不是这里的最佳选择。您打算使用哪个数据框作为比较的基础并添加错误列?假设您选择 df1 并将其与 df2 进行比较,如果 df2 具有 df1 中不存在的其他行怎么办;在这种情况下,df1 中没有添加错误消息的行。

    【讨论】:

      猜你喜欢
      • 2018-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多