在合并函数pandas中验证

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

今天我试图深入了解大熊猫的“合并”功能,我找到了“验证”选项,正如文档中所报告的那样,它可以是:

validate:string,默认无

如果指定,则检查merge是否为指定类型。

“one_to_one”或“1:1”:检查合并键是否在左右数据集中都是唯一的。 “one_to_many”或“1:m”:检查合并键在左数据集中是否唯一。 “many_to_one”或“m:1”:检查合并键在右侧数据集中是否唯一。 “many_to_many”或“m:m”:允许,但不会导致检查。

我已经四处寻找一个关于在何处以及如何使用此功能的工作示例,但我找不到任何。此外,当我尝试将它应用于我正在合并的一组DataFrame时,它似乎没有改变输出。谁能给我一个有效的例子,让我更好地理解它?

提前致谢,

马蒂亚

python-3.x pandas validation merge
1个回答
4
投票

如果验证失败,新的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也提供了进一步的背景信息

© www.soinside.com 2019 - 2024. All rights reserved.