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 上给我们一个 ⭐️ !
在 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 中处理空值的多种技术和策略。通过应用这些方法并遵循相应的最佳实践,我们可以更好地管理数据中的空值,从而更有效地开展数据分析和机器学习工作。


