01.numpy中判断None和nan方法

1.None和nan表达的含义

import numpy as np
from numpy import NaN
>>> print(type(None))
<class 'NoneType'>
>>> print(type(NaN))
<class 'float'>

2. numpy中去除None和nan数值的方法

>>> import numpy as np
>>> a = np.array([1,2,3,None])
>>> a[a != np.array(None)]
array([1, 2, 3], dtype=object)
>>> from numpy import NaN
>>> b = np.array([1,2,3,NaN])
>>> b[~np.isnan(b)]
array([1., 2., 3.])
### 关于 `numpy.ndarray` `NoneType` 在 Python 中,`numpy.ndarray` 是 NumPy 库中用于表示多维数组的对象,而 `NoneType` 表示的是特殊的常量 `None`,用来定义空值或不存在的值。两者之间存在显著的区别。 #### 类型差异 - **NumPy 数组 (`numpy.ndarray`)** 这是一种高效的多维数组对象,专为科学计算设计。可以容纳相同类型的元素,并提供了丰富的操作接口来执行矩阵运算其他数学功能[^1]。 - **空值 (`NoneType`)** 它代表没有任何特定类型的占位符,在逻辑判断、函数返回默认值等方面非常有用。需要注意的是,`None` 不应该被当作零长度序列或其他形式的实际数据结构使用[^4]。 #### 常见错误场景及其解决方案 ##### 场景一:尝试将 `None` 添加到 NumPy 数组中 如果试图向现有的 `numpy.ndarray` 对象追加一个 `None`,这通常会引发类型转换的问题,因为 NumPy 需要一致的数据类型: ```python import numpy as np arr = np.array([1, 2]) try: arr_with_none = np.append(arr, None) except TypeError as e: print(f"Error occurred: {e}") ``` 为了安全地处理这种情况,可以选择创建一个新的包含可选值(如浮点数允许 NaN)的数组或将所有条目都视为对象类型: ```python # 使用 float 并填充 nan new_arr_float = np.hstack((arr.astype(float), [np.nan])) # 或者作为 object 类型 new_arr_object = np.array(list(arr) + [None], dtype=object) print(new_arr_float) # 输出带有 nan 的新数组 print(new_arr_object) # 输出带 None 的新数组 ``` ##### 场景二:混淆布尔上下文中对 `numpy.ndarray` 的评估 另一个常见的陷阱是在条件语句里直接测试整个 NumPy 数组是否等于某个单一值,比如 `if my_array == some_value:`。这种做法可能会导致模糊的结果,因为在大多数情况下这样的表达式是没有明确定义的。相反,应当利用 `.any()` 或 `.all()` 方法来进行逐元素比较: ```python v = np.zeros((2, 2)) if (v != None).all(): # 正确的方式 print("All elements are defined.") else: print("Some elements may be undefined.") # 错误示范 if v is not None: # 即使这里不会抛异常,但不是推荐的做法 pass ``` 实际上,对于像上面那样的二维全零初始化后的数组来说,根本不需要担心其内部有任何未赋初值的情况;但如果确实遇到了可能含有缺失值的情形,则应采用上述更严谨的方法去验证。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值