ZetCode

Pandas 删除缺失值

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

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

缺失值可能会干扰数据分析。Pandas 提供了 `dropna` 等方法来处理它们。这些方法非常灵活,可以根据特定标准删除包含缺失值的行或列。

删除包含任何缺失值的行

此示例显示了如何删除包含任何缺失值的行。

dropna_any.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_dropped = df.dropna()

print(df_dropped)

`dropna` 方法会删除包含任何缺失值的行。这对于清理包含零散缺失数据的数据集非常有用。

删除包含任何缺失值的列

此示例演示了如何删除包含任何缺失值的列。

dropna_columns.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_dropped = df.dropna(axis=1)

print(df_dropped)

`axis=1` 参数会删除包含任何缺失值的列。当不需要包含缺失数据的列时,此参数非常有用。

删除所有值都缺失的行

此示例显示了如何删除所有值都缺失的行。

dropna_all.py
import pandas as pd
import numpy as np

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

df = pd.DataFrame(data)
df_dropped = df.dropna(how='all')

print(df_dropped)

`how='all'` 参数会删除所有值都缺失的行。这对于删除完全空白的行非常有用。

删除特定列中包含缺失值的行

此示例演示了如何删除特定列中包含缺失值的行。

dropna_subset.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_dropped = df.dropna(subset=['A', 'B'])

print(df_dropped)

`subset=['A', 'B']` 参数会删除在 'A' 或 'B' 列中包含缺失值的行。这对于有针对性的清理非常有用。

删除非缺失值数量少于阈值的行

此示例显示了如何删除非缺失值数量少于指定数量的行。

dropna_threshold.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_dropped = df.dropna(thresh=2)

print(df_dropped)

`thresh=2` 参数会删除非缺失值少于 2 个的行。这对于保留部分完整的行非常有用。

就地删除缺失值

此示例演示了如何在不创建新 DataFrame 的情况下删除缺失值。

dropna_inplace.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.dropna(inplace=True)

print(df)

`inplace=True` 参数会直接修改 DataFrame。这对于内存效率非常有用。

使用自定义逻辑删除缺失值

此示例显示了如何根据自定义逻辑删除缺失值。

dropna_custom.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_dropped = df[df['A'].notna() & df['B'].notna()]

print(df_dropped)

`notna` 方法会过滤掉 'A' 和 'B' 列不缺失的行。这允许进行自定义过滤逻辑。

删除缺失值的最佳实践

来源

Pandas dropna 文档

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

作者

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

所有 Pandas 教程列表。