题目
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 列中有空值,因此这一行将被删除。
思路
- 使用df的dropna(axis, how)方法,因为要删的是行,所以axis=0;因为要求只要有某个数据是空值就删除,所以how="any";原地替换:inplace=True;只考虑"name"列(这个题目写的也太烂,要考虑的是name列,需求竟然没有写只考虑name列,而是在background写了而已,辣鸡):subset=["name"]。
代码实现
import pandas as pd
def dropMissingData(students: pd.DataFrame) -> pd.DataFrame:
students.dropna(axis=0, how="any", subset=["name"], inplace=True)
return students
知识积累
- 删除空值数据:df.dropna(axis, how, thresh, subset, inplace)
- axis:待删轴。0或"index"为删除行数据,1或"columns"为删除列数据,默认为0。
- how:筛选方法。"any"为只要有控制就删除对应轴的数据,"all"为该轴全空才删除,默认为"any"。
- thresh:非空元素最低数量。如果该轴的非空元素数量小于该值,则删除该轴数据,默认为None,int类型。
- subset:子集。如果待删的是行数据,那么subset的元素就是列索引;如果待删的是列数据,那么subset的元素就是行索引。subset的区域是判断该轴是否删除的判断依据。
- inplace:是否原地替换,默认为False。