如何用Python的pandas库函数修改缺失的列值

27 阅读2分钟

题目

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

解题方案

1、审题,理解题意

题目意思是有一个名为 products 的 DataFrame,它包含产品数据。然而,一些“数量”数据丢失了。要求用值 0 填充缺失的数量数据。此时我们可以用fillna 函数中的指定方法来替换 None(或通常的 DataFrame 表示形式中的 NaN)值。

fillna 函数参数定义:

我们重点介绍fillna 函数中最常用的参数:

  • value: 标量,字典,Series 或 DataFrame。用于填充空洞的值(例如 0)。这就是我们在解决方案中使用的。
  • method: {‘backfill’, ‘bfill’, ‘pad’, ‘ffill’, None}。用于填充重新索引 Series 中的空洞的方法。默认为 None。
  • axis: {0 or ‘index’, 1 or ‘columns’}。沿其填充缺失值的轴。
  • inplace: 布尔值。如果为True,则原地填充。注意:这将修改此对象上的任何其他视图。默认值为 False。

2、解题思路

对于本题目,我们使用:

products['quantity'].fillna(0, inplace=True)
  • 由于我们正在尝试填充 products DataFrame 的 quantity 列中缺失的数据,因此我们将 fillna 函数应用于 products['quantity']。

  • 由于我们希望将缺少的值(NaN 或 None)替换为 0,因此使用 0 作为 value 参数。

  • 最后,我们想返回原始的 DataFrame,所以我们设置了 inplace=True 来直接修改原始的 DataFrame,而不返回新的 DataFrame。

    请注意,如果不使用 inplace=True,则必须像这样捕获结果:products = products['quantity'].fillna(0)

3、代码实现

import pandas as pd

def fillMissingValues(products: pd.DataFrame) -> pd.DataFrame:
    products['quantity'].fillna(0, inplace=True)
    return products

4、执行结果

image-20231025105642669