merge() 合并两个数据框时,决定合并类型的重要参数是? A. on B. how C. axis D. inplace 答案:B 解析: 语料明确:how 决定数据框合并的类型。on 指定合并关键字(4.4.1),axis 多用于 drop/concat,inplace 用于是否改原对象。how 取值是什么?它是不是默认值? A. 'inner',是默认值 B. 'left',是默认值 C. 'outer',不是默认值 D. 'right',是默认值 答案:A 解析: 内连接 how 的值为 'inner',这也是默认值。省略 how 时效果与内连接相同。merge() 的 how 取值及对应连接方式的有: A. 'inner':内连接 B. 'left':左连接 C. 'right':右连接 D. 'concat':按行拼接 答案:ABC 解析: 四种类型是 inner、left、right、outer。concat 是下一节数据框连接的方法,不是 how 的取值。import pandas as pd
yu = pd.DataFrame({'学号': ['201', '202', '203'], '语文': [91, 82, 93]})
shu = pd.DataFrame({'学号': ['204', '202', '201'], '数学': [94, 85, 96]})
cheng = pd.merge(yu, shu, on='学号', how='inner')
print(list(cheng['学号']))
A. ['201', '202', '203'] B. ['201', '202'] C. ['201', '202', '203', '204'] D. ['204', '202', '201'] 答案:B 解析: 内连接只保留共同键。yu 有 201/202/203,shu 有 204/202/201,交集为 201 和 202。203 只在左表、204 只在右表,均被丢掉。A 是左连接的学号,C 是外连接,D 是右连接的行序。
import pandas as pd
yu = pd.DataFrame({'学号': ['201', '202', '203'], '语文': [91, 82, 93]})
shu = pd.DataFrame({'学号': ['204', '202', '201'], '数学': [94, 85, 96]})
cheng = pd.merge(yu, shu, on='学号', how='left')
print(cheng)
A. 94 B. 缺失(NaN) C. 0 D. 93 答案:B 解析: 左连接保留左侧 yu 的全部行。203 只在 yu 中出现,shu 没有该学号,数学成绩用 NaN 填充。94 是 204 的数学;93 是 203 的语文。
pd.merge(yu, shu, on='学号') 省略 how 时,效果与 how='outer' 相同。 答案:× 解析: 默认值是 'inner' 而不是 'outer'。省略 how 会丢掉只在一侧出现的学号(如 203、204)。import pandas as pd
yu = pd.DataFrame({'学号': ['201', '202', '203'], '语文': [91, 82, 93]})
shu = pd.DataFrame({'学号': ['204', '202', '201'], '数学': [94, 85, 96]})
cheng = pd.merge(yu, shu, on='学号', how='right')
print(cheng)
A. 204、NaN、96 B. 201、91、96 C. 204、93、94 D. 203、NaN、96 答案:A 解析: 右连接保留右侧 shu 的全部行,行序跟随 shu:204、202、201,故第一行学号是 204。204 在 yu 中不存在,语文为 NaN。201 按学号对齐到 shu 中的 96,不是按位置去取 shu 第一行的 94。
merge() 中 how 的四种取值,并分别说明各自保留哪些行、未匹配时如何处理。 答案: (1)'inner'(内连接,默认):只保留两个数据框中共同键值的行。 (2)'left'(左连接):保留左侧数据框的所有行;右侧无匹配则填 NaN。 (3)'right'(右连接):保留右侧数据框的所有行;左侧无匹配则填 NaN。 (4)'outer'(外连接):保留两个数据框中的所有行(全部键),缺少匹配的数据用 NaN 填充。 解析: 评分要点:① 四个取值 inner/left/right/outer 写全;② 能说明 inner 是默认、只留共同键;③ 能区分左/右是哪一侧为基准;④ 未匹配填 NaN 而非 0。写成 concat 或漏掉默认值可酌情扣分。import pandas as pd
yu = pd.DataFrame({'学号': ['201', '202', '203'], '语文': [91, 82, 93]})
shu = pd.DataFrame({'学号': ['204', '202', '201'], '数学': [94, 85, 96]})
print(pd.merge(yu, shu, on='学号', how='inner'))
print(pd.merge(yu, shu, on='学号', how='left'))
print(pd.merge(yu, shu, on='学号', how='outer'))
答案: (1)内连接 2 行,学号为 201、202。201 的数学是 96。merge 按「学号」对齐,不是按行位置对齐:shu 中 204 对应 94、201 对应 96。 (2)左连接以 yu 为基准保留 201/202/203。203 只出现在 yu 中,shu 没有该学号,数学用 NaN 填充。 (3)外连接保留全部键,比内连接多出 203 和 204。203 无数学、204 无语文,均以 NaN 填充。 解析: 评分要点:① 内连接行数与学号正确,并能用按键对齐解释 96 而非 94;② 能说明 203 仅在左表故数学为 NaN;③ 能指出外连接多 203、204 且缺侧填 NaN。只背结果不讲对齐过程可酌情扣分。