2883. 删去丢失的数据
2883. 删去丢失的数据
题目
DataFrame
students
+-------------+--------+ | Column Name | Type | +-------------+--------+ | student_id | int | | name | object | | age | int | +-------------+--------+
There are some rows having missing values in the name
column.
Write a solution to remove the rows with missing values.
The result format is in the following example.
Example 1:
Input:
+------------+---------+-----+ | student_id | name | age | +------------+---------+-----+ | 32 | Piper | 5 | | 217 | None | 19 | | 779 | Georgia | 20 | | 849 | Willow | 14 | +------------+---------+-----+
Output:
+------------+---------+-----+ | student_id | name | age | +------------+---------+-----+ | 32 | Piper | 5 | | 779 | Georgia | 20 | | 849 | Willow | 14 | +------------+---------+-----+
Explanation:
Student with id 217 havs empty value in the name column, so it will be removed.
题目大意
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 列中有空值,因此这一行将被删除。
解题思路
删除空值行:
- Pandas 提供了
dropna
方法,可以根据某些列的值是否为空(NaN
或None
)来删除对应的行。 - 调用
students.dropna(subset=['name'])
,检查name
列是否包含空值(NaN
或None
)。 - 如果检测到空值,直接删除整行。
- Pandas 提供了
返回新 DataFrame:
dropna
返回一个去除空值后的新 DataFrame,不会影响原始 DataFrame。- 如果希望对原 DataFrame 就地修改,可以传递
inplace=True
参数。 - 如果需要检查多列是否为空,可将
subset
参数设置为一个列表,例如['name', 'age']
。
复杂度分析
- 时间复杂度:
O(n)
,其中n
是行数,需要逐行检查name
列是否为空。 - 空间复杂度:
O(n)
,去掉空值行后返回一个新 DataFrame。
代码
import pandas as pd
def dropMissingData(students: pd.DataFrame) -> pd.DataFrame:
return students.dropna(subset='name')