python pandas deepdiff两个yaml文件和打印不匹配值

问题描述 投票:0回答:1

我有两个不同的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:为什么只打印{'root 3':'denmark.enabled'}}但不是{0:True}}

查询2:两个文件中都存在加拿大,但是在一个文件中启用了:true,而在另一个文件中启用了:false ...所以为什么我在做差异时不显示它,所以在加拿大一个文件,另一个错误?

Yaml 1

Yaml 2

Output

python pandas printing yaml diff
1个回答
1
投票

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

{0:True}是熊猫函数to_dict的输出的一部分(表示行0的值为True)。与DeepDiff无关。

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

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

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

print(DeepDiff(df1.to_dict(), df2.to_dict()))
© www.soinside.com 2019 - 2024. All rights reserved.