Skip to content

Pandas Where:利用 Pandas 的强大功能管理空值

Updated on

与数据打交道是我们工作的核心。然而原始数据往往杂乱、不完整,并且充满需要处理的空值。如果不妥善处理,空值会在进行数据分析或机器学习任务时带来各种问题。幸运的是,借助 Python 中的 Pandas 库,我们可以快速而高效地管理数据中的空值。

在本文中,我们将探索 Pandas 的 where() 函数以及其他多种用于处理空值的技术。内容包括:如何在 Pandas DataFrame 中识别和处理缺失数据、处理空值的常见策略、管理缺失值的最佳实践等。

何时使用 where() 而非 mask()

where() 会保留满足条件的值,并替换其余值;mask() 则执行相反的操作。二者在 pandas 2.x 中都会遵循 pandas 的可空语义(pd.NA)。

import pandas as pd
 
s = pd.Series([10, None, 30, 40], dtype="Int64")
keep_under_35 = s.where(s < 35)     # 40 becomes <NA>
mask_nulls = s.mask(s.isna(), 0)    # fill nulls without touching valid rows

当你希望保留满足条件的有效条目、并将其他条目标记为空值时,可使用 where();需要设置默认值时,可再配合 fillna 一起使用。

想在 Python 中快速创建数据可视化吗?

PyGWalker 是一个开源 Python 项目,可以在 Jupyter Notebook 环境中加速数据分析与可视化工作流。

PyGWalker (opens in a new tab) 能将你的 Pandas DataFrame(或 Polars DataFrame)转换为一个“可视化”的 UI,你可以通过拖拽字段轻松创建图表。只需使用以下代码:

pip install pygwalker
import pygwalker as pyg
gwalker = pyg.walk(df)

你现在就可以在以下在线 Notebook 中体验 PyGWalker:

同时,别忘了在 GitHub 上给我们一个 ⭐️ !

Run PyGWalker in Kaggle Notebook (opens in a new tab)Run PyGWalker in Google Colab (opens in a new tab)Give PyGWalker a ⭐️ on GitHub (opens in a new tab)
Run PyGWalker in Kaggle Notebook (opens in a new tab)Run PyGWalker in Google Colab (opens in a new tab)Run PyGWalker in Google Colab (opens in a new tab)

在 Pandas DataFrame 中识别和处理缺失数据

在处理数据时,最常见的任务之一就是检查是否存在缺失数据。Pandas 提供了多种方式来识别空值,包括 isnull()notnull(),它们返回布尔值,用于指示 DataFrame 中的元素是否为空。我们可以利用这些函数快速判断数据中是否存在缺失值。

例如,假设有一个包含多列的 DataFrame,其中部分列存在缺失值。

import pandas as pd
import numpy as np

data = {'name': ['Alice', 'Bob', 'Charlie'],
        'age': [25, np.nan, 30],
        'gender': ['F', 'M', 'M'],
        'income': [50000, 60000, np.nan]}

df = pd.DataFrame(data)

要检查 DataFrame 中的缺失值,可以在整个 DataFrame 上调用 isnull() 函数:

print(df.isnull())

这会返回一个与原 DataFrame 形状相同的 DataFrame,其中 True 表示该位置为空值,False 表示非空。

如果想统计每一列中的缺失值数量,可以在 isnull() 之后调用 sum() 方法:

print(df.isnull().sum())

这会返回一个 Series 对象,其索引为列名,值为对应列中缺失值的数量。

我们还可以通过 dropna() 方法删除包含空值的行或列。该方法会移除任意包含至少一个空值的行或列。

df.dropna()

另外,也可以用特定的值替换空值,使用 fillna() 函数即可:

df.fillna(0)

这些只是 Pandas 中用于识别和处理空值的方法的一部分。要查看完整列表,请参考 Pandas 官方文档。

在 Pandas 中与空值共处

在进行数据分析或机器学习任务时,空值往往是一个棘手的问题。不过,我们可以采用多种策略来有效地处理空值。下面是其中的一些方法:

插值(Interpolation)

处理缺失数据的一种常见方法是插值。插值是一种统计技术,用于根据相邻观测值估计缺失值。在 Pandas 中,可以使用 interpolate() 方法对 DataFrame 进行插值:

df.interpolate()

填充缺失值

另一种策略是用常数或由其余数据计算得到的值来填充缺失值。可以使用 fillna() 方法将空值填充为指定的值:

df.fillna(0)

或者,我们也可以用剩余数据的均值、众数或中位数来填充缺失值:

df.fillna(df.mean())

删除缺失值

删除缺失值是处理空值的常见策略之一。可以使用 dropna() 方法删除所有包含一个或多个空值的行:

df.dropna()

也可以删除包含空值的列:

df.dropna(axis=1)

插补(Imputation)

插补是一种基于已观测数据来估计缺失值的技术。在 Pandas 环境下,我们可以借助 scikit-learn 来完成插补:

from sklearn.impute import SimpleImputer

imp = SimpleImputer(missing_values=np.nan, strategy='mean')

df[['age', 'income']] = imp.fit_transform(df[['age', 'income']])

以上只是 Pandas 中处理空值的诸多策略中的一部分。采用哪种策略,取决于具体问题以及缺失数据的性质。

在 Pandas 中管理缺失值的最佳实践

处理缺失数据可能比较棘手,但有一些实践经验可以提供帮助。以下是管理 Pandas 中空值的几个建议:

  • 在进行任何分析之前,都要先检查数据中是否存在缺失值。
  • 使用描述性统计来了解数据分布并识别异常值。
  • 综合考虑多种处理缺失数据的策略,如插值、插补或删除缺失值等。
  • 了解不同策略可能带来的影响,以及它们如何改变分析结果。
  • 使用数据可视化工具,帮助理解数据的特征和分布情况。
  • 记录数据中缺失值的情况,以及在分析过程中是如何处理这些缺失值的。

遵循这些最佳实践,我们就能更好地管理数据中的空值,并顺利开展数据分析或机器学习任务。

结论

在处理数据时,空值往往是个难题,但借助 Pandas,我们拥有一整套强大的工具来识别和处理缺失数据。本文介绍了 Pandas 的 where() 函数,以及在 Pandas 中处理空值的多种技术和策略。通过应用这些方法并遵循相应的最佳实践,我们可以更好地管理数据中的空值,从而更有效地开展数据分析和机器学习工作。