需指定how="left"执行左连接,确保左表全量保留、右表仅匹配填充;键列名不同时用left_on/right_on;可预筛选右表列以精简结果;键重复时默认笛卡尔匹配,必要时需去重。

如果您使用 pandas 的 merge 操作,希望保留左表的全部行,同时仅将右表中能与左表匹配的列值填充进来,其余位置设为缺失值,则需明确指定合并类型为左连接。以下是实现该目标的具体方法:
一、使用 how="left" 参数执行左连接
左连接(left join)确保左表所有行均保留在结果中,右表仅提供匹配键对应的列值;若右表无对应键,则结果中右表列填充 NaN。
1、导入 pandas 库:import pandas as pd
2、定义左表和右表 DataFrame,确保两表存在至少一个共同列名作为连接键,例如 "id":
3、调用 pd.merge() 函数,显式传入 how="left" 参数,并通过 on 指定连接键列名。
4、执行合并后,检查结果 DataFrame 的行数是否等于左表原始行数,验证左表完整性。
二、指定左右表连接键列名不一致时使用 left_on 与 right_on
当左表与右表用于匹配的列名不同时,不能直接使用 on 参数,而需分别指定左表匹配列与右表匹配列,避免因列名差异导致连接失败或误匹配。
1、确认左表中用于连接的列名,例如 "user_id";
2、确认右表中用于连接的列名,例如 "uid";
3、在 pd.merge() 中传入 left_on="user_id" 和 right_on="uid";
4、仍需保留 how="left" 以维持左表全量行。
三、限制右表仅保留特定列参与合并
为避免右表冗余列污染结果,可在 merge 前对右表进行列筛选,仅保留连接键及所需填充列,提升结果可读性与内存效率。
1、构造右表子集:使用双括号语法选取连接键列与目标列,例如 right_subset = right_df[["uid", "name", "score"]];
2、将该子集传入 merge 函数的 right 参数;
3、同步调整 left_on 与 right_on 的列名参数,确保键列存在于子集中;
4、执行合并后,结果中仅含左表全部行与右表指定列的匹配值。
四、处理重复连接键时的默认行为说明
当左表或右表中连接键存在重复值时,merge 默认执行笛卡尔积式匹配,即左表某键每出现一次,就与右表所有同键行组合生成新行。该行为可能导致结果行数显著增加,但依然满足“保留左表所有行”的要求。
1、检查左表连接键列是否含重复值:left_df["id"].duplicated().any();
2、检查右表连接键列是否含重复值:right_df["id"].duplicated().any();
3、若需规避笛卡尔扩展,应在 merge 前对右表按连接键去重,例如 right_df.drop_duplicates(subset=["id"], keep="first");
4、将去重后的右表传入 merge 调用。










