题目
DataFrame students
+-------------+--------+
| Column Name | Type |
+-------------+--------+
| student_id | int |
| name | object |
| age | int |
+-------------+--------+
在 name
列里有一些具有缺失值的行。
编写一个解决方案,删除具有缺失值的行。
返回结果格式如下示例所示。
示例 1:
输入:
+------------+---------+-----+
| student_id | name | age |
+------------+---------+-----+
| 32 | Piper | 5 |
| 217 | None | 19 |
| 779 | Georgia | 20 |
| 849 | Willow | 14 |
+------------+---------+-----+
输出:
+------------+---------+-----+
| student_id | name | age |
+------------+---------+-----+
| 32 | Piper | 5 |
| 779 | Georgia | 20 |
| 849 | Willow | 14 |
+------------+---------+-----+
解释:
学号为 217 的学生所在行在 name 列中有空值,因此这一行将被删除。
解题方案
1、审题,理解题意
题目的意思是学生信息的 pandas DataFrame 中name 列中有一些行缺少值(None 或 NaN),有丢失的数据。想要把缺失数据的行数据删除掉。
要解决这个问题,可以使用 pandas 的 dropna 函数从 DataFrame 中删除那些缺少名称的行。
dropna 函数定义:
dropna 函数: dropna 函数属于 pandas DataFrame 并且被用来移除缺失的值。在 pandas 中,缺失的数据通常由 NaN(非数字的缩写)值表示,题目中显示为 None,也被 pandas 认为是缺失值。
dropna 函数参数定义:
axis: 它可以是 {0 or ‘index’, 1 or ‘columns’}。默认为 0。如果 axis=0,则丢弃包含缺失值的行;如果 axis=1,则丢弃包含缺失值的列。
how: 确定当我们至少有一个 NA 或全部 NA 时,是否从 DataFrame 中删除行或列。
how=‘any’: 如果存在任何 NA 值,则删除该行或列(默认)。
how=‘all’: 如果所有值都为 NA,则删除该行或列。
thresh: 需要多少非 NA 值。这是一个整型参数,需要最小数量的非 NA 值才能保留行/列。
subset: 要考虑的另一个轴上的标签,例如,如果您正在删除行,则这些标签将是要包括的列的列表。当您只想考虑某些列中的 NA 值时,这特别有用。
inplace: 这是一个布尔值,如果是 True,则对 DataFrame 本身进行更改。请记住,在使用 inplace=True 参数时,您修改的是原始的 DataFrame。如果出于任何原因需要保留原始数据,请避免使用 inplace=True,而是将结果赋给新的 DataFrame。
2、解题思路
对于题目我们只考虑 name 列,所以我们设置了 subset=[‘name’]。students.dropna(subset=[‘name’], inplace=True) ,该参数告诉 dropna 在查找缺失值时只考虑 name 列。也就是说只有 name 列缺少值的行才会被删除。我们需要修改原始的 DataFrame,所以设置 inplace=True。通过将 inplace 设置为 True,我们直接修改了原来的 students DataFrame。如果设置为 False(或省略),则会返回包含删除行的新 DataFrame,而原来的 students DataFrame 将保持不变。
3、代码实现
import pandas as pd
def dropMissingData(students: pd.DataFrame) -> pd.DataFrame:
students.dropna(subset=['name'], inplace=True)
return students
4、执行结果
return students