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')
