今天,我试图更深入地了解熊猫的“合并”功能,我发现了“验证”选项,如文档中所述,该选项可以是:
validate:字符串,默认为无
如果指定,则检查合并是否为指定类型。
“ one_to_one”或“ 1:1”:检查合并键在左侧和右侧是否唯一 正确的数据集。 “ one_to_many”或“ 1:m”:检查合并键是否唯一 在左数据集中。 “ many_to_one”或“ m:1”:检查合并键是否为 在正确的数据集中唯一。 “ many_to_many”或“ m:m”:允许,但是 不会导致检查。
我环顾四周,找到了在哪里以及如何使用此功能的有效示例,但找不到任何示例。而且,当我尝试将其应用于要合并的一组DataFrame时,它似乎并没有改变输出。 谁能给我一个可行的例子,以使我更好地理解它?
预先感谢
马提亚
答案 0 :(得分:4)
如果验证失败,新的valdate
参数将引发MergeError
,例如:
df1 = pd.DataFrame({'a':list('aabc'),'b':np.random.randn(4)})
df2 = pd.DataFrame({'a':list('aabc'),'b':np.random.randn(4)})
print(df1)
print(df2)
a b
0 a -2.557152
1 a -0.145969
2 b -1.629560
3 c -0.233517
a b
0 a -0.352038
1 a 0.490438
2 b 0.319452
3 c -0.599481
现在,如果我们在'a'
列上合并而没有validate
:
In[39]:
df1.merge(df2, on='a')
Out[39]:
a b_x b_y
0 a -2.557152 -0.352038
1 a -2.557152 0.490438
2 a -0.145969 -0.352038
3 a -0.145969 0.490438
4 b -1.629560 0.319452
5 c -0.233517 -0.599481
这可行,但是由于列“ b”不同,我们为“ a”获得了更多行,现在我们通过validate='1:1'
,我们得到了一个错误:
MergeError: Merge keys are not unique in either left or right dataset; not a one-to-one merge
如果我们通过validate='1:m'
,则会收到另一个错误:
MergeError: Merge keys are not unique in left dataset;not a one-to-many merge
如果我们通过'm:m'
,同样会使验证失败:
In[42]:
df1.merge(df2, on='a',validate='m:m')
Out[42]:
a b_x b_y
0 a -2.557152 -0.352038
1 a -2.557152 0.490438
2 a -0.145969 -0.352038
3 a -0.145969 0.490438
4 b -1.629560 0.319452
5 c -0.233517 -0.599481
没有错误发生,如果我们没有通过validate
参数,我们将得到相同的合并df
api文档未提供示例,但what's new部分提供了示例,原始github enhancement也提供了更多背景信息