- Python Pandas 教程
- Python Pandas - 首页
- Python Pandas - 简介
- Python Pandas - 环境搭建
- Python Pandas - 基础
- Python Pandas - 数据结构介绍
- Python Pandas - 索引对象
- Python Pandas - Panel
- Python Pandas - 基本功能
- Python Pandas - 索引与数据选择
- Python Pandas - Series
- Python Pandas - Series
- Python Pandas - 切片 Series 对象
- Python Pandas - Series 对象的属性
- Python Pandas - Series 对象的算术运算
- Python Pandas - 将 Series 转换为其他对象
- Python Pandas - DataFrame
- Python Pandas - DataFrame
- Python Pandas - 访问 DataFrame
- Python Pandas - 切片 DataFrame 对象
- Python Pandas - 修改 DataFrame
- Python Pandas - 从 DataFrame 中删除行
- Python Pandas - DataFrame 的算术运算
- Python Pandas - I/O 工具
- Python Pandas - I/O 工具
- Python Pandas - 使用 CSV 格式
- Python Pandas - 读取和写入 JSON 文件
- Python Pandas - 从 Excel 文件读取数据
- Python Pandas - 将数据写入 Excel 文件
- Python Pandas - 使用 HTML 数据
- Python Pandas - 剪贴板
- Python Pandas - 使用 HDF5 格式
- Python Pandas - 与 SQL 的比较
- Python Pandas - 数据处理
- Python Pandas - 排序
- Python Pandas - 重新索引
- Python Pandas - 迭代
- Python Pandas - 级联
- Python Pandas - 统计函数
- Python Pandas - 描述性统计
- Python Pandas - 使用文本数据
- Python Pandas - 函数应用
- Python Pandas - 选项和自定义
- Python Pandas - 窗口函数
- Python Pandas - 聚合
- Python Pandas - 合并/连接
- Python Pandas - 多索引
- Python Pandas - 多索引基础
- Python Pandas - 使用多索引进行索引
- Python Pandas - 使用多索引进行高级重新索引
- Python Pandas - 重命名多索引标签
- Python Pandas - 对多索引进行排序
- Python Pandas - 二元运算
- Python Pandas - 二元比较运算
- Python Pandas - 布尔索引
- Python Pandas - 布尔掩码
- Python Pandas - 数据重塑和透视
- Python Pandas - 透视
- Python Pandas - 堆叠和取消堆叠
- Python Pandas - 熔化
- Python Pandas - 计算虚拟变量
- Python Pandas - 分类数据
- Python Pandas - 分类数据
- Python Pandas - 分类数据的排序和排列
- Python Pandas - 比较分类数据
- Python Pandas - 处理缺失数据
- Python Pandas - 缺失数据
- Python Pandas - 填充缺失数据
- Python Pandas - 缺失值的插值
- Python Pandas - 删除缺失数据
- Python Pandas - 使用缺失数据进行计算
- Python Pandas - 处理重复项
- Python Pandas - 重复数据
- Python Pandas - 计数和检索唯一元素
- Python Pandas - 重复标签
- Python Pandas - 分组和聚合
- Python Pandas - GroupBy
- Python Pandas - 时间序列数据
- Python Pandas - 日期功能
- Python Pandas - Timedelta
- Python Pandas - 稀疏数据结构
- Python Pandas - 稀疏数据
- Python Pandas - 可视化
- Python Pandas - 可视化
- Python Pandas - 其他概念
- Python Pandas - 警告和陷阱
- Python Pandas 有用资源
- Python Pandas - 快速指南
- Python Pandas - 有用资源
- Python Pandas - 讨论
Python Pandas - 缺失数据
在现实生活中,尤其是在机器学习和数据分析等领域,缺失数据始终是一个问题。缺失值会严重影响模型和分析的准确性,因此正确处理它们至关重要。本教程将介绍如何在 Python Pandas 中识别和处理缺失数据。
数据缺失的时机和原因?
考虑一下对某个产品进行在线调查的场景。很多时候,人们不会分享所有与他们相关的信息,他们可能会跳过一些问题,导致数据不完整。例如,有些人可能会分享他们对产品的体验,但不会分享他们使用该产品的时间长短,反之亦然。在这样的实时场景中,缺失数据是经常发生的,有效地处理它至关重要。
在 Pandas 中表示缺失数据
Pandas 使用不同的哨兵值来表示缺失数据 (NA 或 NaN),具体取决于数据类型。
numpy.nan:用于 NumPy 数据类型。当在整数或布尔数组中引入缺失值时,数组将升级为np.float64或object,因为NaN是一个浮点值。
NaT:用于 np.datetime64、np.timedelta64 和 PeriodDtype 中缺失的日期和时间。NaT 代表“非时间”。
<NA>:对于 StringDtype、Int64Dtype、Float64Dtype、BooleanDtype 和 ArrowDtype,这是一个更灵活的缺失值表示。当引入缺失值时,此类型会保留原始数据类型。
示例
现在让我们看看 Pandas 如何表示不同数据类型的缺失数据。
import pandas as pd import numpy as np ser1 = pd.Series([1, 2], dtype=np.int64).reindex([0, 1, 2]) ser2 = pd.Series([1, 2], dtype=np.dtype("datetime64[ns]")).reindex([0, 1, 2]) ser3 = pd.Series([1, 2], dtype="Int64").reindex([0, 1, 2]) df = pd.DataFrame({'NumPy':ser1, 'Dates':ser2, 'Others':ser3} ) print(df)
其输出如下:
NumPy | Dates | Others |
---|---|---|
1.0 | 1970-01-01 00:00:00.000000001 | 1 |
2.0 | 1970-01-01 00:00:00.000000002 | 2 |
NaN | NaT | <NA> |
检查缺失值
Pandas 提供了isna()和notna()函数来检测缺失值,这些函数适用于不同的数据类型。这些函数返回一个布尔 Series,指示缺失值的存在。
示例
以下示例使用isna()方法检测缺失值。
import pandas as pd import numpy as np ser = pd.Series([pd.Timestamp("2020-01-01"), pd.NaT]) print(pd.isna(ser))
执行上述代码后,我们将得到以下输出:
0 False 1 True dtype: bool
需要注意的是,使用isna()和notna()时,None也被视为缺失值。
使用缺失数据进行计算
当使用缺失数据进行计算时,Pandas 将NA视为零。如果计算中的所有数据都是NA,则结果将为NA。
示例
此示例计算 DataFrame “one”列中包含缺失数据的数值之和。
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f', 'h'],columns=['one', 'two', 'three']) df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']) print(df['one'].sum())
其输出如下:
2.02357685917
替换/填充缺失数据
Pandas 提供了几种处理缺失数据的方法。一种常见的方法是使用fillna()方法替换缺失值为特定值。
示例
以下程序演示了如何使用fillna()方法将 NaN 替换为标量值(将“NaN”替换为“0”)。
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(3, 3), index=['a', 'c', 'e'],columns=['one', 'two', 'three']) df = df.reindex(['a', 'b', 'c']) print("Input DataFrame:\n",df) print("Resultant DataFrame after NaN replaced with '0':") print(df.fillna(0))
其输出如下:
Input DataFrame:
one | two | three | |
---|---|---|---|
a | 0.188006 | -0.685489 | -2.088354 |
b | NaN | NaN | NaN |
c | -0.446296 | 2.298046 | 0.346000 |
one | two | three | |
---|---|---|---|
a | 0.188006 | -0.685489 | -2.088354 |
b | 0.000000 | 0.000000 | 0.000000 |
c | -0.446296 | 2.298046 | 0.346000 |
删除缺失值
如果您想简单地排除缺失值而不是替换它们,请使用dropna()函数删除缺失值。
示例
此示例使用dropna()函数删除缺失值。
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f', 'h'],columns=['one', 'two', 'three']) df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']) print(df.dropna())
其输出如下:
one | two | three | |
---|---|---|---|
a | 0.170497 | -0.118334 | -1.078715 |
c | 0.326345 | -0.180102 | 0.700032 |
e | 1.972619 | -0.322132 | -1.405863 |
f | 1.760503 | -1.179294 | 0.043965 |
h | 0.747430 | 0.235682 | 0.973310 |