Новый параметр 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
Это работает, но мы получаем больше строк для '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
ошибки не возникает, и мы получаем тот же объединенный df, если мы не передали validate
параметр
Документы API не дают примера, но в разделе , что делает новый , оригинальное улучшение github также дает дополнительную справочную информацию