数据框合并是指把两个数据框按共同的关键字列对齐,合成一张包含双方字段的新表。本章学习目标要求熟悉数据的合并、连接和转换;4.4 节先讲合并,再讲连接。本节核心 API 是 pd.merge():merge() 用来合并两个数据框,参数 on 指定合并关键字。导入惯例为 import pandas as pd。标准写法为 cheng = pd.merge(yu, shu, on='学号'),函数按指定列将两个数据框合并,生成一个新的数据框,不修改原来的 yu 和 shu。合并关键字必须是两表都有的列,用来判断「哪一行对应哪一行」。
课程示例把语文成绩与数学成绩按学号合成一张成绩表。yu = pd.DataFrame({'学号': ['201', '202', '203'], '语文': [91, 82, 93]}),shu = pd.DataFrame({'学号': ['203', '202', '201'], '数学': [94, 85, 96]})。执行 cheng = pd.merge(yu, shu, on='学号') 后,新数据框列为「学号、语文、数学」,三行分别是:201 对应语文 91、数学 96;202 对应 82 与 85;203 对应 93 与 94。shu 中学号顺序是 203、202、201,与 yu 的 201、202、203 不同,但 pandas 能够自动对齐:201 配到的是数学 96,而不是 shu 第一行的 94。这与序列按索引对齐类似,不必事先把两表排成同一行序。结果行序跟随左侧数据框 yu,仍为 201、202、203。
易错点:on 必须填写两表共有的列名,本例为「学号」,不能写成只有左表才有的「语文」。课程里学号是字符串 '201'、'202'、'203',不要写成整数 201,键类型不一致时无法正确匹配。不要按行号把两表左右硬拼:那样会把 201 错配成数学 94。merge() 按关键字横向拼列,与 4.4.3 的 concat()(数据框连接,常用于把多段同学记录上下拼接)不同;下一节才讲 how 的内连接、左连接、右连接、外连接。本节两表学号集合完全相同,合并后得到全部 3 名同学的语文和数学成绩。
关键要点
merge() 用来合并两个数据框,参数 on 指定合并关键字。pd.merge(左表, 右表, on='共同列名'),生成新数据框,不改原对象。yu 与数学表 shu 合成「学号、语文、数学」。merge()(按键横向合并)与 concat()(连接/上下拼接)混用。