ZetCode

Pandas 填充缺失值

最后修改时间:2025年3月1日

Pandas 是一个强大的 Python 数据操作库。在处理 DataFrame 时,处理缺失值是一项常见的任务。本教程将通过实际示例介绍如何使用 Pandas 填充缺失值。

缺失值可能会干扰数据分析。Pandas 提供了 fillna 等方法来处理它们。这些方法非常灵活,允许使用常量、前向/后向填充或自定义逻辑来填充缺失值。

使用常量值填充

本示例演示如何使用常量填充缺失值。

fillna_constant.py
import pandas as pd
import numpy as np

data = {
    'A': [1, 2, np.nan, 4],
    'B': [np.nan, 2, 3, 4],
    'C': [1, 2, 3, np.nan]
}

df = pd.DataFrame(data)
df_filled = df.fillna(0)

print(df_filled)

fillna(0) 方法将所有缺失值替换为 0。这对于初始化缺失数据非常有用。

前向填充缺失值

本示例演示了前向填充缺失值。

fillna_ffill.py
import pandas as pd
import numpy as np

data = {
    'A': [1, np.nan, np.nan, 4],
    'B': [np.nan, 2, 3, np.nan]
}

df = pd.DataFrame(data)
df_filled = df.fillna(method='ffill')

print(df_filled)

method='ffill' 参数使用最后一个有效观测值填充缺失值。这对于时间序列数据非常有用。

后向填充缺失值

本示例演示了如何后向填充缺失值。

fillna_bfill.py
import pandas as pd
import numpy as np

data = {
    'A': [1, np.nan, np.nan, 4],
    'B': [np.nan, 2, 3, np.nan]
}

df = pd.DataFrame(data)
df_filled = df.fillna(method='bfill')

print(df_filled)

method='bfill' 参数使用下一个有效观测值填充缺失值。这对于填充数据中的空白非常有用。

使用列均值填充

本示例演示了使用列均值填充缺失值。

fillna_mean.py
import pandas as pd
import numpy as np

data = {
    'A': [1, 2, np.nan, 4],
    'B': [np.nan, 2, 3, 4]
}

df = pd.DataFrame(data)
df_filled = df.fillna(df.mean())

print(df_filled)

df.mean 方法计算每列的均值。缺失值将被这些均值替换,从而保持数据分布。

使用自定义逻辑填充

本示例演示了如何使用自定义逻辑填充缺失值。

fillna_custom.py
import pandas as pd
import numpy as np

data = {
    'A': [1, 2, np.nan, 4],
    'B': [np.nan, 2, 3, 4]
}

df = pd.DataFrame(data)
df_filled = df.fillna({'A': 0, 'B': 1})

print(df_filled)

fillna({'A': 0, 'B': 1}) 方法将列 'A' 中的缺失值填充为 0,将列 'B' 中的缺失值填充为 1。这允许进行特定于列的逻辑。

使用插值填充

本示例演示了使用插值填充缺失值。

fillna_interpolate.py
import pandas as pd
import numpy as np

data = {
    'A': [1, np.nan, np.nan, 4],
    'B': [np.nan, 2, 3, np.nan]
}

df = pd.DataFrame(data)
df_filled = df.interpolate()

print(df_filled)

interpolate 方法使用线性插值填充缺失值。这对于连续数据非常有用。

使用限制填充

本示例演示了如何限制填充的缺失值数量。

fillna_limit.py
import pandas as pd
import numpy as np

data = {
    'A': [1, np.nan, np.nan, 4],
    'B': [np.nan, 2, 3, np.nan]
}

df = pd.DataFrame(data)
df_filled = df.fillna(method='ffill', limit=1)

print(df_filled)

limit=1 参数将填充限制为每个列只有一个缺失值。这可以防止稀疏数据中的过度填充。

填充缺失值的最佳实践

来源

Pandas fillna 文档

在本文中,我们探讨了如何在 Pandas DataFrame 中填充缺失值。

作者

我的名字是 Jan Bodnar,我是一名充满热情的程序员,拥有丰富的编程经验。我从 2007 年开始撰写编程文章。迄今为止,我已撰写了 1,400 多篇文章和 8 本电子书。我在编程教学方面拥有十多年的经验。

所有 Pandas 教程列表。