4.4.2-合并方式.md

4.4.2 合并方式

merge() 方法用来将两个数据框合并成一个。使用 merge() 合并时,一个重要参数是 how,它决定了数据框合并的类型。课程示例用语文成绩表 yu 与数学成绩表 shu:yu 含学号 201、202、203,语文成绩分别为 91、82、93;shu 含学号 204、202、201,数学成绩分别为 94、85、96。与 4.4.1 不同,本节 shu 用 204 替换了 203,两侧键不完全重合,才能比较各种连接方式。合并关键字仍用 on='学号'。

四种类型如下。(1)内连接只保留两个数据框中共同键值的行。也就是说,只有当两个数据框的键值匹配时,才会在结果中显示这行数据。how 的值为 'inner',这也是默认值。pd.merge(yu, shu, on='学号', how='inner') 的结果只有学号 201 和 202,语文/数学分别为 91/96 与 82/85。(2)左连接保留左侧数据框中的所有行,右侧数据框只有与左侧匹配的行会出现在结果中。如果没有匹配,则右侧的数据用 NaN 填充。how 的值为 'left'。结果保留 yu 的全部三行,203 号没有数学成绩,数学列为 NaN。(3)右连接与左连接相反,它保留右侧数据框的所有行,左侧数据框只有匹配的行会出现在结果中。如果没有匹配,则左侧的数据用 NaN 填充。how 的值为 'right'。结果保留 shu 的三行,行序为 204、202、201,204 号没有语文成绩,语文列为 NaN。(4)外连接保留两个数据框中的所有行,缺少匹配的数据会用 NaN 填充。这种方式合并所有键的值,不管是否匹配。how 的值为 'outer'。结果含 201、202、203、204 四行:203 号没有数学成绩,204 号没有语文成绩,均以 NaN 填充。

实际选用时:需要“两边都有才保留”用内连接;以某张表为基准补另一科成绩用左连接或右连接;要保留全部学号用外连接。易错点:省略 how 等同于内连接,会丢掉只在一侧出现的学号(203、204);左、右是相对于 merge 的参数顺序,写在前面的是左表;未匹配处填充 NaN,该列可能变为浮点数(如 96.0);不要把四种 how 与下一节用 concat() 按轴拼接数据框混为一谈。

关键要点

下载此文件