python pandas deepdiff 两个 yaml 文件并打印不匹配值
python pandas deepdiff two yaml files and printing mismatch values
我有两个不同的 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:canada 在两个文件中都存在,但在一个文件中是 enabled:true,在另一个文件中是 enabled:false...那么为什么我在执行 a 时它不显示diff,在一个文件中为真,在另一个文件中为假?
Yaml 1
Yaml 2
Output
query 1: why is it just printing {'root3': 'denmark.enabled'}} BUT not
{0: True}}
{0:True}
是 pandas 函数 to_dict
输出的一部分(意味着行 0
的值为 True
)。与DeepDiff
.
无关
query 2: canada is present in both the files but in one file it is
enabled:true and another file it is enabled:false...so why is it not
showing when I am doing a diff, that it is true in one file and false
in another?
尽管 deepdiff claims 可以找到“字典、迭代器、字符串 和其他 objects 的差异”它没有深入研究 pandas 数据帧。它只是遍历将产生列 headers 的数据框。因此,它会在 headers 列中发现任何差异。然后它遍历这些 headers - 而不是遍历列中的值! - 所以它不会注意到列值的任何变化。
一个可能的解决方法是比较数据帧的字典表示:
print(DeepDiff(df1.to_dict(), df2.to_dict()))
我有两个不同的 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:canada 在两个文件中都存在,但在一个文件中是 enabled:true,在另一个文件中是 enabled:false...那么为什么我在执行 a 时它不显示diff,在一个文件中为真,在另一个文件中为假?
Yaml 1
Yaml 2
Output
query 1: why is it just printing {'root3': 'denmark.enabled'}} BUT not {0: True}}
{0:True}
是 pandas 函数 to_dict
输出的一部分(意味着行 0
的值为 True
)。与DeepDiff
.
query 2: canada is present in both the files but in one file it is enabled:true and another file it is enabled:false...so why is it not showing when I am doing a diff, that it is true in one file and false in another?
尽管 deepdiff claims 可以找到“字典、迭代器、字符串 和其他 objects 的差异”它没有深入研究 pandas 数据帧。它只是遍历将产生列 headers 的数据框。因此,它会在 headers 列中发现任何差异。然后它遍历这些 headers - 而不是遍历列中的值! - 所以它不会注意到列值的任何变化。
一个可能的解决方法是比较数据帧的字典表示:
print(DeepDiff(df1.to_dict(), df2.to_dict()))