Сегодня я пытался немного углубиться в функцию «слияния» панд и нашел опцию «проверить», которая, как указано в документации, может быть:
validate : string, default None
If specified, checks if merge is of specified type.
“one_to_one” or “1:1”: check if merge keys are unique in both left and right datasets. “one_to_many” or “1:m”: check if merge keys are unique in left dataset. “many_to_one” or “m:1”: check if merge keys are unique in right dataset. "many_to_many” or “m:m”: allowed, but does not result in checks.
Я поискал рабочий пример, где и как использовать эту функцию, но не нашел. Более того, когда я попытался применить его к группе DataFrames, которую я объединял, результат не изменился. Может ли кто-нибудь дать мне рабочий пример, чтобы я лучше его понял?
Заранее спасибо,
Маттиа





Новый параметр 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 также дает дополнительную справочную информацию
Документы и полный код доступны по адресу github.com/pandas-dev/pandas, вы можете делать push-запросы, они будут рассмотрены перед слиянием, или вы можете отправить проблему github.com/pandas-dev/pandas/issues, чтобы запросить улучшение документации, но разработчики заняты, и поскольку это мало- задача усилий они скажут вам, что вы можете отправить push-запрос