在我的实际开发中遇到的坑点,查阅了相关文档 总结一下

left = pd.DataFrame({'A': [1, 2], 'B': [2, 2]})

Pandas DataFrames 中 merge 合并的坑点(出现重复连接键)_实际开发

right = pd.DataFrame({'A': [4, 5, 6], 'B': [2, 2, 2]})

Pandas DataFrames 中 merge 合并的坑点(出现重复连接键)_内存溢出_02

result = pd.merge(left, right, on='B', how='outer')

 

Pandas DataFrames 中 merge 合并的坑点(出现重复连接键)_内存溢出_03

 警告:在重复键上加入/合并可能导致返回的帧是行维度的乘法,这可能导致内存溢出。在加入大型DataFrame之前,重复值。

Pandas DataFrames 中 merge 合并的坑点(出现重复连接键)_内存溢出_04

检查重复键

 如果知道右侧的重复项​​DataFrame​​​但希望确保左侧DataFrame中没有重复项,则可以使用该 ​validate='one_to_many'​参数,这不会引发异常。

pd.merge(left, right, on='B', how='outer', validate="one_to_many")

# 打印的结果:
A_x B A_y
0 1 1 NaN
1 2 2 4.0
2 2 2 5.0
3 2 2 6.0

参数:

validate : str, optional
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.
 

 官方文档连接:

​Pandas文档中提及 merge​