Проверить в функции слияния панд

Сегодня я пытался немного углубиться в функцию «слияния» панд и нашел опцию «проверить», которая, как указано в документации, может быть:

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, которую я объединял, результат не изменился. Может ли кто-нибудь дать мне рабочий пример, чтобы я лучше его понял?

Заранее спасибо,

Маттиа

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
9
0
9 288
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Новый параметр 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-запрос

EdChum 28.06.2018 12:30

Другие вопросы по теме