在合并函数pandas中验证
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在合并函数pandas中验证相关的知识,希望对你有一定的参考价值。
今天我试图深入了解大熊猫的“合并”功能,我找到了“验证”选项,正如文档中所报告的那样,它可以是:
validate:string,默认无
如果指定,则检查merge是否为指定类型。
“one_to_one”或“1:1”:检查合并键是否在左右数据集中都是唯一的。 “one_to_many”或“1:m”:检查合并键在左数据集中是否唯一。 “many_to_one”或“m:1”:检查合并键在右侧数据集中是否唯一。 “many_to_many”或“m:m”:允许,但不会导致检查。
我已经四处寻找一个关于在何处以及如何使用此功能的工作示例,但我找不到任何。此外,当我尝试将它应用于我正在合并的一组DataFrame时,它似乎没有改变输出。谁能给我一个有效的例子,让我更好地理解它?
提前致谢,
马蒂亚
如果验证失败,新的valdate
param将引发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
这有效,但我们为'a'获得更多行,因为列'b'不同,现在我们传递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也提供了进一步的背景信息
以上是关于在合并函数pandas中验证的主要内容,如果未能解决你的问题,请参考以下文章