【问题标题】:python pandas deepdiff two yaml files and printing mismatch valuespython pandas deepdiff 两个yaml文件并打印不匹配值
【发布时间】:2020-06-07 00:45:50
【问题描述】:

我有两个不同的 Yaml 文件。一个 yaml 文件与另一个 yaml 文件略有不同。 我想打印两件事(即)与第二个文件相比时第一个文件中的差异,然后与第一个文件相比时第二个文件中的差异。下面是我的代码:-

import yaml
import pandas as pd
from deepdiff import DeepDiff

with open(r'C:\Users\Project\Desktop\DRsystem\stars4.yaml','r') as file:
    df1 = pd.io.json.json_normalize(yaml.load(file, Loader=yaml.FullLoader))

with open(r'C:\Users\Project\Desktop\DRsystem\stars5.yaml','r') as file:
    df2 = pd.io.json.json_normalize(yaml.load(file, Loader=yaml.FullLoader))

x = df1.to_dict()
print(x)
ddiff1 = DeepDiff(df1,df2)
print(ddiff1)
print("---------")
y = df2.to_dict()
print(y)
ddiff2 = DeepDiff(df2,df1)
print(ddiff2)

输出:上面的代码打印了差异,但是它显示了添加的新内容(即)任何不完全存在于其中一个 yaml 中的东西,这很好,但它不会打印任何共同点,只需稍作更改。如果我们可以看到附加的屏幕截图(yaml 文件以及我的输出),那就更好理解了

查询 1:为什么它只是打印 {'root3': 'denmark.enabled'}} 但不是 {0: True}}

查询 2:加拿大在两个文件中都存在,但在一个文件中启用:true 和另一个文件启用:false...所以为什么在我做差异时它没有显示,这是真的在一个文件中,在另一个文件中为假?

Yaml 1

Yaml 2

Output

【问题讨论】:

    标签: python pandas printing yaml diff


    【解决方案1】:

    查询 1:为什么它只是打印 {'root3': 'denmark.enabled'}} 但不是 {0:真}}

    {0:True} 是 pandas 函数 to_dict 输出的一部分(意味着行 0 具有值 True)。与DeepDiff无关。

    查询 2:加拿大在两个文件中都存在,但在一个文件中 已启用:true 和另一个文件已启用:false ...那为什么不是 显示当我做差异时,它在一个文件中为真,在一个文件中为假 在另一个?

    虽然 deepdiff claims 可以找到“字典、可迭代对象、字符串和其他对象的差异”,但它并没有深入研究 pandas 数据帧。它只是迭代将产生列标题的数据框。因此,它会发现列标题中的任何差异。然后它遍历这些标题 - 而不是列中的值! - 所以它不会注意到列值的任何变化。

    一种可能的解决方法是比较数据帧的字典表示:

    print(DeepDiff(df1.to_dict(), df2.to_dict()))
    

    【讨论】:

      猜你喜欢
      • 2018-07-12
      • 2017-07-30
      • 1970-01-01
      • 2016-10-23
      • 2012-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-08
      相关资源
      最近更新 更多