填充 Pandas DataFrame 中的缺失值

Fariba Laiq 2024年2月15日
  1. Pandas 中 ffill() 方法的语法
  2. 使用 Pandas 中的 ffill() 方法填充 DataFrame 中的缺失值
填充 Pandas DataFrame 中的缺失值

有时,我们可能有一个缺失值的数据集。有很多方法可以使用某些方法来替换丢失的数据。

ffill()(前向填充)是替换 DataFrame 中缺失值的方法之一。此方法将 NaN 替换为先前的行或列值。

Pandas 中 ffill() 方法的语法

# Python 3.x
dataframe.ffill(axis, inplace, limit, downcast)

ffill() 方法采用四个可选参数:

  • axis 指定从何处填充缺失值。值 0 表示行,1 表示列。
  • inplace 可以是 True 或 False。True 指定在当前 DataFrame 中进行更改,而 False 表示创建具有填充值的新 DataFrame 的单独副本。
  • limit 指定要沿轴连续填充的最大缺失值数。
  • downcast 指定要为特定数据类型填充的值字典。

使用 Pandas 中的 ffill() 方法填充 DataFrame 中的缺失值

沿行轴填充缺失值

在下面的代码中,我们有一个缺失值用 None 或 NaN 表示的 DataFrame。我们已经显示了实际的 DataFrame,然后将 ffill() 方法应用于该 DataFrame。

默认情况下,ffill() 方法会沿着行/索引轴替换缺失值。NaN 将替换为该单元格上一行的值。

第一行在输出中仍然包含 NaN,因为没有前一行。

示例代码:

# Python 3.x
import pandas as pd

df = pd.DataFrame(
    {
        "C1": [2, 7, None, 4],
        "C2": [None, 2, None, 3],
        "C3": [2, None, 6, 5],
        "C4": [5, 2, 8, None],
    }
)
display(df)
df2 = df.ffill()
display(df2)

输出:

沿行轴填充缺失值

沿列轴填充缺失值

在这里,我们将指定 axis=1。它将通过观察相应单元格的前一列中的值来填充缺失值。

在输出中,除了两个值之外,所有值都被填充。因为我们没有列 1 的前一列,所以该值仍然是 NaN。

第 2 列中的值是 NaN,因为前一列中对应的单元格也是 NaN。

示例代码:

# Python 3.x
import pandas as pd

df = pd.DataFrame(
    {
        "C1": [2, 7, None, 4],
        "C2": [None, 2, None, 3],
        "C3": [2, None, 6, 5],
        "C4": [5, 2, 8, None],
    }
)
display(df)
df2 = df.ffill(axis=1)
display(df2)

输出:

沿列轴填充缺失值

使用 limit 限制要填充的连续 NaN 的数量

我们可以使用 limit 参数来限制沿行或列轴填充的连续缺失值的数量。

在下面的代码中,我们有实际的 DataFrame,其中最后三行有连续的 NaN。如果我们指定 limit=2,则不能超过两个连续的 NaN 可以沿行轴填充。

这就是为什么最后一行中的 NaN 仍未填充的原因。

示例代码:

# Python 3.x
import pandas as pd

df = pd.DataFrame(
    {
        "C1": [2, 7, None, 4],
        "C2": [4, None, None, None],
        "C3": [6, 6, 6, 5],
        "C4": [None, 2, 8, None],
    }
)
display(df)
df2 = df.ffill(axis=0, limit=2)
display(df2)

输出:

使用限制参数填充

使用 inplace 填充原始 DataFrame 中的值

假设我们想要在原始 DataFrame 中进行更改,而不是在另一个 DataFrame 中复制具有填充值的 DataFrame。在这种情况下,我们可以使用值为 True 的 inplace 参数。

示例代码:

# Python 3.x
import pandas as pd

df = pd.DataFrame(
    {
        "C1": [2, 7, None, 4],
        "C2": [4, None, None, None],
        "C3": [6, 6, 6, 5],
        "C4": [None, 2, 8, None],
    }
)
display(df)
df.ffill(inplace=True)
display(df)

输出:

使用就地参数填充

作者: Fariba Laiq
Fariba Laiq avatar Fariba Laiq avatar

I am Fariba Laiq from Pakistan. An android app developer, technical content writer, and coding instructor. Writing has always been one of my passions. I love to learn, implement and convey my knowledge to others.

LinkedIn

相关文章 - Pandas DataFrame