题目
DataFrame products
+-------------+--------+
| Column Name | Type |
+-------------+--------+
| name | object |
| quantity | int |
| price | int |
+-------------+--------+
编写一个解决方案,在 quantity
列中将缺失的值填充为 0
。
返回结果如下示例所示。
示例 1:
输入:
+-----------------+----------+-------+
| name | quantity | price |
+-----------------+----------+-------+
| Wristwatch | 32 | 135 |
| WirelessEarbuds | None | 821 |
| GolfClubs | None | 9319 |
| Printer | 849 | 3051 |
+-----------------+----------+-------+
输出:
+-----------------+----------+-------+
| name | quantity | price |
+-----------------+----------+-------+
| Wristwatch | 32 | 135 |
| WirelessEarbuds | 0 | 821 |
| GolfClubs | 0 | 9319 |
| Printer | 849 | 3051 |
+-----------------+----------+-------+
解释:
Toaster 和 Headphones 的数量被填充为 0。
思路
- 使用df的fillna()方法,指定quantity列的缺失值填充为0。
代码实现
import pandas as pd
def fillMissingValues(products: pd.DataFrame) -> pd.DataFrame:
products = products.fillna(value={"quantity":0})
return products
知识积累
- df填充缺失值:df.fillna(method=None, limit=None, axis=None, value=None, inplace=False)
- method:填充方法,"ffill"为前向填充,将缺失值填充为前面的值;"bfill"为后向填充,将缺失值填充为后面的值。
- limit:若有连续的空值,最多能被填充limit个,剩下就不能填充了,需跟method使用。
- value:用于填充空值的值,也可以配合{列名:填充值}字典指定对应列的填充值。
- axis:指定要填充的轴,0为行,1为列。
- inplace:是否原地替换,如果是,返回值为None,不是则返回DataFrame。
- 也可以直接指定列:df[列名].fillna(value, inplace)
官方题解
- 官解用的是第二种方法。
- 稍微看了一下,直接指定列空间开销小,时间开销大;直接指定整个DataFrame时间开销小,空间开销大。
- 复现:
import pandas as pd def fillMissingValues(products: pd.DataFrame) -> pd.DataFrame: products["quantity"].fillna(0, inplace=True) return products