dropna() B. fillna() C. isna() 或 isnull() D. duplicated() 答案:C 解析: 语料明确:isna() 或 isnull() 用来检测缺失值,返回布尔型数据框。dropna() 是删除,fillna() 是填充,duplicated() 属于重复值检测(4.6.3)。df.isna() 与 df.isnull(),下列说法正确的是? A. 前者只检测行,后者只检测列 B. 两个函数的输出结果相同 C. 只有 isna() 能用于数据框 D. isnull() 会直接删除缺失值 答案:B 解析: 课程注释:df.isna() 与 df.isnull() 两个函数的输出结果相同。二者都只做检测,不删除、不填充。isna() 返回的布尔型数据框中,True 对应的位置有缺失值。 答案:√ 解析: 语料说明:True 对应的位置有缺失值。课程示例中二月的美好集团、北方通信和三月的广东科技为 True。dropna() 默认会直接修改原始数据框,把含缺失值的行删掉。 答案:× 解析: dropna() 删除有缺失值的行并返回一个新数据框,默认不修改原始对象。要保留结果需赋值,如 df2 = df.dropna()。dropna() 删除包含缺失值的行或列 B. 使用 fillna() 用特定值(如均值、中位数或前后值)填充 C. 使用 fillna(0) 用 0 填充缺失值 D. 使用 drop_duplicates() 删除重复行 答案:ABC 解析: 处理方式取决于分析需求。课程给出 dropna() 删除,以及 fillna() 用 0、前后值或列均值填充。drop_duplicates() 是 4.6.3 重复值处理,不是缺失值方法。import numpy as np
from pandas import DataFrame
a = np.array([[163, 113, 158],
[np.nan, np.nan, 119],
[193, 127, np.nan],
[109, 126, 110]])
df = DataFrame(a, index=['一月', '二月', '三月', '四月'],
columns=['美好集团', '北方通信', '广东科技'])
print(df.dropna())
A. 一月、二月、三月、四月 B. 一月、四月 C. 二月、三月 D. 仅一月 答案:B 解析: dropna() 默认删除有缺失值的行。二月美好集团与北方通信缺失,三月广东科技缺失,这两行被删,只保留完整的一月、四月。
import numpy as np
from pandas import DataFrame
a = np.array([[163, 113, 158],
[np.nan, np.nan, 119],
[193, 127, np.nan],
[109, 126, 110]])
df = DataFrame(a, index=['一月', '二月', '三月', '四月'],
columns=['美好集团', '北方通信', '广东科技'])
print(df.fillna(0).loc['二月', '美好集团'])
A. nan B. 163.0 C. 0.0 D. 155.0 答案:C 解析: fillna(0) 用 0 填充全部缺失值。二月美好集团原为缺失,填成 0.0。163.0 是前向填充结果,155.0 是列均值填充结果。
fillna() 的填充策略,下列说法正确的有: A. fillna(0) 用 0 值填充缺失值 B. method='ffill' 用缺失值前面的值填充 C. method='bfill' 用缺失值前面的值填充 D. fillna(value=df.mean()) 用所在列的平均值填充 答案:ABD 解析: ffill 是前向填充(前面的值);bfill 是用后面的值填充,故 C 错误。均值填充按列计算,不是全表一个数。df.fillna(method='ffill') 指定用缺失值后面的值填充。 答案:× 解析: method='ffill' 用缺失值前面的值填充;用后面的值填充应指定 method='bfill'。较新版本 pandas 对应写法为 df.ffill() 与 df.bfill()。import numpy as np
from pandas import DataFrame
a = np.array([[163, 113, 158],
[np.nan, np.nan, 119],
[193, 127, np.nan],
[109, 126, 110]])
df = DataFrame(a, index=['一月', '二月', '三月', '四月'],
columns=['美好集团', '北方通信', '广东科技'])
filled = df.fillna(value=df.mean())
print(filled.loc['二月', '美好集团'],
filled.loc['二月', '北方通信'],
filled.loc['三月', '广东科技'])
A. 0.0、0.0、0.0 B. 163.0、113.0、119.0 C. 155.0、122.0、129.0 D. 193.0、127.0、110.0 答案:C 解析: fillna(value=df.mean()) 用所在列平均值填充。美好集团 (163+193+109)/3=155.0,北方通信 (113+127+126)/3=122.0,广东科技 (158+119+110)/3=129.0。A 是填 0,B 是前向填充,D 是后向填充。
dropna() 与 fillna() 各做什么;再列出课程中 fillna() 的三种填充方式。 答案: (1)检测:isna() 或 isnull(),返回布尔型数据框,True 表示该位置缺失,二者结果相同。 (2)dropna():删除包含缺失值的行或列,默认删行并返回新数据框。 (3)fillna():用特定值填充缺失值。课程三种方式:fillna(0) 用 0 填充;fillna(method='ffill') 用前面的值(bfill 用后面的值);fillna(value=df.mean()) 用所在列平均值填充。 解析: 评分要点:① 检测方法写全 isna/isnull 且说明结果相同、True 为缺失;② dropna 是删除、默认删行、返回新对象;③ fillna 三种策略(0 / 前后值 / 列均值)写清,ffill 与 bfill 方向不反。漏掉「返回新对象」或把 bfill 说成前面的值可酌情扣分。isna() 中哪些位置为 True?(2)dropna() 后剩下哪几行?(3)fillna(0)、前向填充、列均值填充时,二月「美好集团」分别变成多少?为什么三者不同?import numpy as np
from pandas import DataFrame
a = np.array([[163, 113, 158],
[np.nan, np.nan, 119],
[193, 127, np.nan],
[109, 126, 110]])
df = DataFrame(a, index=['一月', '二月', '三月', '四月'],
columns=['美好集团', '北方通信', '广东科技'])
print(df.isna())
print(df.dropna())
print(df.fillna(0))
print(df.ffill()) # 课程写法:df.fillna(method='ffill')
print(df.fillna(value=df.mean()))
答案: (1)True 的位置:二月美好集团、二月北方通信、三月广东科技。 (2)只剩一月、四月两行;二月、三月因含缺失被删。 (3)填 0 得到 0.0;前向填充用一月的 163.0;列均值填充用美好集团非缺失均值 155.0。三者策略不同:常数填充、取同一列前一个有效值、按列统计后回填,所以结果不同。原 df 仍含缺失,因为这些方法默认都返回新对象。 解析: 评分要点:① 三个缺失位置写全;② dropna 剩一月、四月;③ 三个填充值 0.0 / 163.0 / 155.0 正确,并能解释策略差异;④ 能指出默认不改原对象更佳。只背数字不讲原因可酌情扣分。
文件位置:
知识库/第4章 pandas数据分析库/4.6.1-缺失值检测与处理.md(正文约 480 字)问答库/第4章 pandas数据分析库/4.6.1-缺失值检测与处理.md(12 题:单选/多选/判断/简答,易 4 / 中 6 / 难 2)术语按语料使用「序列 / 数据框」。涉及数据的题目均带可运行代码;第 12 题前向填充写成 df.ffill(),与课程 fillna(method='ffill') 结果一致(pandas 3 已去掉 fillna 的 method 参数)。