跳至主要內容

2883. 删去丢失的数据


2883. 删去丢失的数据

🟢   🔗 力扣open in new window LeetCodeopen in new window

题目

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 列中有空值,因此这一行将被删除。

解题思路

  1. 删除空值行

    • Pandas 提供了 dropna 方法,可以根据某些列的值是否为空(NaNNone)来删除对应的行。
    • 调用 students.dropna(subset=['name']),检查 name 列是否包含空值(NaNNone)。
    • 如果检测到空值,直接删除整行。
  2. 返回新 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')