Подтвердить в функции объединения панд - PullRequest
0 голосов
/ 27 июня 2018

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

validate: string, default None

Если указано, проверяет, имеет ли слияние указанный тип.

«one_to_one» или «1: 1»: проверить, являются ли ключи слияния уникальными как слева, так и правильные наборы данных. «One_to_many» или «1: m»: проверить, являются ли ключи слияния уникальными в левом наборе данных. «Many_to_one» или «m: 1»: проверить, являются ли ключи слияния уникальный в правом наборе данных. «many_to_many» или «m: m»: разрешено, но не приводит к проверкам.

Я посмотрел вокруг, чтобы найти рабочий пример того, где и как использовать эту функцию, но я не смог ее найти. Более того, когда я пытался применить его к группе фреймов данных, которые я объединял, это не изменило вывод. Кто-нибудь может дать мне рабочий пример, чтобы я лучше его понял?

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

Маттиа

1 Ответ

0 голосов
/ 27 июня 2018

Новый параметр 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 также дает дополнительную справочную информацию

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...