- NumPy 教程
- NumPy - 首页
- NumPy - 简介
- NumPy - 环境配置
- NumPy 数组
- NumPy - Ndarray 对象
- NumPy - 数据类型
- NumPy 数组的创建和操作
- NumPy - 数组创建例程
- NumPy - 数组操作
- NumPy - 从现有数据创建数组
- NumPy - 从数值范围创建数组
- NumPy - 数组迭代
- NumPy - 数组重塑
- NumPy - 数组连接
- NumPy - 数组堆叠
- NumPy - 数组分割
- NumPy - 数组扁平化
- NumPy - 数组转置
- NumPy 索引和切片
- NumPy - 索引和切片
- NumPy - 高级索引
- NumPy 数组属性和运算
- NumPy - 数组属性
- NumPy - 数组形状
- NumPy - 数组大小
- NumPy - 数组步幅
- NumPy - 数组元素大小
- NumPy - 广播
- NumPy - 算术运算
- NumPy - 数组加法
- NumPy - 数组减法
- NumPy - 数组乘法
- NumPy - 数组除法
- NumPy 高级数组运算
- NumPy - 交换数组轴
- NumPy - 字节交换
- NumPy - 复制和视图
- NumPy - 元素级数组比较
- NumPy - 数组过滤
- NumPy - 数组连接
- NumPy - 排序、搜索和计数函数
- NumPy - 数组搜索
- NumPy - 数组的并集
- NumPy - 查找唯一行
- NumPy - 创建日期时间数组
- NumPy - 二元运算符
- NumPy - 字符串函数
- NumPy - 数学函数
- NumPy - 统计函数
- NumPy - 矩阵库
- NumPy - 线性代数
- NumPy - Matplotlib
- NumPy - 使用 Matplotlib 绘制直方图
- NumPy - NumPy 的 I/O 操作
- NumPy 排序和高级操作
- NumPy - 数组排序
- NumPy - 沿轴排序
- NumPy - 使用花式索引排序
- NumPy - 结构化数组
- NumPy - 创建结构化数组
- NumPy - 操作结构化数组
- NumPy - 字段访问
- NumPy - 记录数组
- Numpy - 加载数组
- Numpy - 保存数组
- NumPy - 向数组追加值
- NumPy - 交换数组列
- NumPy - 向数组插入轴
- NumPy 缺失数据处理
- NumPy - 缺失数据处理
- NumPy - 缺失值识别
- NumPy - 删除缺失数据
- NumPy - 缺失数据插补
- NumPy 性能优化
- NumPy - 使用数组进行性能优化
- NumPy - 使用数组进行矢量化
- NumPy - 数组的内存布局
- Numpy 线性代数
- NumPy - 线性代数
- NumPy - 矩阵库
- NumPy - 矩阵加法
- NumPy - 矩阵减法
- NumPy - 矩阵乘法
- NumPy - 元素级矩阵运算
- NumPy - 点积
- NumPy - 矩阵求逆
- NumPy - 行列式计算
- NumPy - 特征值
- NumPy - 特征向量
- NumPy - 奇异值分解
- NumPy - 求解线性方程组
- NumPy - 矩阵范数
- NumPy 元素级矩阵运算
- NumPy - 求和
- NumPy - 求平均值
- NumPy - 求中位数
- NumPy - 求最小值
- NumPy - 求最大值
- NumPy 集合运算
- NumPy - 唯一元素
- NumPy - 交集
- NumPy - 并集
- NumPy - 差集
- NumPy 有用资源
- NumPy 编译器
- NumPy - 快速指南
- NumPy - 有用资源
- NumPy - 讨论
NumPy - 缺失值识别
识别数组中的缺失值
识别数组中的缺失值意味着找到数据缺失的位置,在 NumPy 中通常用 NaN(非数字)表示。可以使用 NumPy 的 np.isnan() 函数来识别数组中的缺失值。
NaN 是由 IEEE 浮点数标准定义的一种特殊的浮点数。它用于表示未定义或不可表示的值,例如 0/0 的结果或涉及 NaN 的数学运算的结果。
使用 isnan() 函数
NumPy 中的 np.isnan() 函数用于识别数组中的 NaN(非数字)值。
此函数检查数组中的每个元素,并返回一个形状相同的布尔数组,其中每个元素如果对应于原始数组中的元素是 NaN,则为 True,否则为 False。以下是语法:
numpy.isnan(x)
其中,x 是要检查 NaN 值的输入数组。
示例
在下面的示例中,我们使用 np.isnan() 函数创建一个掩码来识别数组中的 NaN 值:
import numpy as np # Creating an array with NaN values arr = np.array([1.0, 2.5, np.nan, 4.7, np.nan, 6.2]) # Identifying NaN values using np.isnan() nan_mask = np.isnan(arr) print("Original Array:\n", arr) print("NaN Mask:\n", nan_mask)
获得的输出如下:
Original Array: [1. 2.5 nan 4.7 nan 6.2] NaN Mask: [False False True False True False]
识别多维数组中的缺失值
识别多维数组中的缺失值是指检测数组各个维度上的 NaN 值,例如在二维矩阵或三维张量中。
此过程类似于处理一维数组,但是需要处理多个维度,同时要清楚缺失值的位置。
示例
在这个例子中,我们使用 np.isnan() 函数创建一个掩码来识别二维数组中的 NaN 值:
import numpy as np # Creating a 2D array with NaN values arr_2d = np.array([[1.0, np.nan, 3.5], [np.nan, 5.1, 6.3]]) # Identifying NaN values in the 2D array nan_mask_2d = np.isnan(arr_2d) print("Original 2D Array:\n", arr_2d) print("NaN Mask 2D:\n", nan_mask_2d)
这将产生以下结果:
Original 2D Array: [[1. nan 3.5] [nan 5.1 6.3]] NaN Mask 2D: [[False True False] [ True False False]]
识别结构化数组中的缺失值
识别结构化数组中的缺失值包括检测数组字段中的 NaN 或其他占位符,尤其是在数组包含混合数据类型和多个字段时。
结构化数组很复杂,因为每个字段都可以有自己的数据类型,因此处理缺失值需要单独关注每个字段。
示例
在下面的示例中,我们使用 np.isnan() 函数创建一个掩码来识别结构化数组的 'age' 字段中的 NaN 值:
import numpy as np # Creating a structured array with NaN values dtype = [('name', 'U10'), ('age', 'f8')] structured_arr = np.array([('Alice', 25), ('Bob', np.nan), ('Cathy', 23)], dtype=dtype) # Checking for NaN values in the 'age' field nan_mask_structured = np.isnan(structured_arr['age']) print("Structured Array:\n", structured_arr) print("NaN Mask for 'age' field:\n", nan_mask_structured)
以上代码的输出如下:
Structured Array: [('Alice', 25.) ('Bob', nan) ('Cathy', 23.)] NaN Mask for 'age' field: [False True False]
计算数组中缺失值的个数
要确定数组中缺失值的个数,可以使用 np.isnan() 函数,该函数返回一个布尔数组,指示 NaN 值的位置。
此布尔数组中的每个元素如果对应于原始数组中的元素是 NaN,则为“True”,否则为“False”。通过对这个布尔数组求和,可以有效地计算 True 值的个数,这对应于缺失值的个数。
示例
在下面的示例中,我们使用 np.isnan() 函数生成一个布尔掩码来识别数组中的 NaN 值。然后,我们通过对掩码求和来计算 NaN 值的个数,从而得到缺失值的总数:
import numpy as np # Create an array with some NaN values arr = np.array([1.0, 2.0, np.nan, 4.0, np.nan]) # Generate a boolean array indicating NaN values nan_mask = np.isnan(arr) # Count the number of NaN values nan_count = np.sum(nan_mask) print("Boolean mask of NaN values:") print(nan_mask) print("Number of NaN values:") print(nan_count)
获得的输出如下所示:
Boolean mask of NaN values: [False False True False True] Number of NaN values: 2
使用 np.isnan() 函数进行布尔索引
使用 np.isnan() 函数识别缺失值后,可以将其与布尔索引结合使用,对这些值执行各种操作。
布尔索引允许根据条件(例如,元素是否为 NaN)创建掩码,然后使用此掩码来过滤、替换或分析满足此条件的元素。
示例:过滤掉缺失值
可以使用布尔索引从数组中过滤掉缺失值,只保留非缺失值:
import numpy as np # Create an array with some NaN values arr = np.array([1.0, 2.0, np.nan, 4.0, np.nan]) # Generate a boolean array indicating NaN values nan_mask = np.isnan(arr) # Filter out NaN values filtered_arr = arr[~nan_mask] print("Original array:") print(arr) print("Filtered array (without NaN values):") print(filtered_arr)
执行上述代码后,我们将得到以下输出:
Original array: [ 1. 2. nan 4. nan] Filtered array (without NaN values): [1. 2. 4.]
示例:替换缺失值
可以使用特定值替换 NaN 值,例如非缺失值的平均值或中位数:
import numpy as np # Create an array with some NaN values arr = np.array([1.0, 2.0, np.nan, 4.0, np.nan]) # Calculate the mean of non-NaN values mean_value = np.nanmean(arr) # Replace NaN values with the mean value arr_with_replacement = np.where(np.isnan(arr), mean_value, arr) print("Original array:") print(arr) print("Array with NaN replaced by mean:") print(arr_with_replacement)
产生的结果如下:
Original array: [ 1. 2. nan 4. nan] Array with NaN replaced by mean: [1. 2. 2.33333333 4. 2.33333333]
示例:分析缺失值
可以使用布尔索引分析缺失值的分布或模式,例如检查哪些行或列具有缺失数据:
import numpy as np # Create a 2D array with some NaN values arr_2d = np.array([[1.0, np.nan, 3.0], [4.0, np.nan, 6.0], [np.nan, 8.0, 9.0]]) # Identify NaN values nan_mask_2d = np.isnan(arr_2d) # Count NaN values per row nan_count_per_row = np.sum(nan_mask_2d, axis=1) print("Original 2D array:") print(arr_2d) print("NaN count per row:") print(nan_count_per_row)
我们将得到如下所示的输出:
Original 2D array: [[ 1. nan 3.] [ 4. nan 6.] [nan 8. 9.]] NaN count per row: [1 1 1]