从 NumPy 数组中删除 Nan 值
本文将讨论一些内置的 NumPy 函数,你可以使用这些函数删除 nan
值。
在 NumPy 中使用 logical_not()
和 isnan()
方法删除 Nan 值
logical_not()用于将逻辑 NOT 应用于数组的元素。isnan()
是一个布尔函数,用于检查元素是否为 nan。
使用 isnan()
函数,我们可以创建一个布尔数组,该数组的所有非 nan
值均具有 False
,而所有 nan
值均具有 True
。接下来,使用 logical_not()
函数,我们可以将 True
转换为 False
,反之亦然。
最后,使用布尔索引,我们可以从原始 NumPy 数组中过滤所有非 nan
值。所有以 True
作为其值的索引将用于过滤 NumPy 数组。
要深入了解这些函数,请分别参考其官方文档,这里和这里。
请参考以下代码片段以获取解决方案。
import numpy as np
myArray = np.array([1, 2, 3, np.nan, np.nan, 4, 5, 6, np.nan, 7, 8, 9, np.nan])
output1 = myArray[np.logical_not(np.isnan(myArray))] # Line 1
output2 = myArray[~np.isnan(myArray)] # Line 2
print(myArray)
print(output1)
print(output2)
输出:
[ 1. 2. 3. nan nan 4. 5. 6. nan 7. 8. 9. nan]
[1. 2. 3. 4. 5. 6. 7. 8. 9.]
[1. 2. 3. 4. 5. 6. 7. 8. 9.]
Line 2
是 Line 1
的简化版本。
在 NumPy 中使用 isfinite()
方法删除 Nan 值
顾名思义,isfinite()
函数是一个布尔函数,用于检查元素是否为有限值。它还可以检查数组中的有限值,并为该数组返回一个布尔数组。布尔数组将为所有 nan
值存储 False
,为所有有限值存储 True
。
我们将使用此函数为目标数组检索一个布尔数组。使用布尔索引,我们将过滤所有有限值。同样,如上所述,具有 True
值的索引将用于过滤数组。
这是示例代码。
import numpy as np
myArray1 = np.array([1, 2, 3, np.nan, np.nan, 4, 5, 6, np.nan, 7, 8, 9, np.nan])
myArray2 = np.array([np.nan, np.nan, np.nan, np.nan, np.nan, np.nan])
myArray3 = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
output1 = myArray1[np.isfinite(myArray1)]
output2 = myArray2[np.isfinite(myArray2)]
output3 = myArray3[np.isfinite(myArray3)]
print(myArray1)
print(myArray2)
print(myArray3)
print(output1)
print(output2)
print(output3)
输出:
[ 1. 2. 3. nan nan 4. 5. 6. nan 7. 8. 9. nan]
[nan nan nan nan nan nan]
[ 1 2 3 4 5 6 7 8 9 10]
[1. 2. 3. 4. 5. 6. 7. 8. 9.]
[]
[ 1 2 3 4 5 6 7 8 9 10]
要了解有关此函数的更多信息,请参考官方文档
使用 math.isnan
方法删除 Nan 值
除了这两个 NumPy 解决方案之外,还有两种其他删除 nan
值的方法。这两种方式涉及 math
库中的 isnan()
函数和 pandas
库中的 isnull
函数。这两个函数都会检查元素是否为 nan
,并返回布尔值结果。
这是使用 isnan()
方法的解决方案。
import numpy as np
import math
myArray1 = np.array([1, 2, 3, np.nan, np.nan, 4, 5, 6, np.nan, 7, 8, 9, np.nan])
myArray2 = np.array([np.nan, np.nan, np.nan, np.nan, np.nan, np.nan])
myArray3 = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
booleanArray1 = [not math.isnan(number) for number in myArray1]
booleanArray2 = [not math.isnan(number) for number in myArray2]
booleanArray3 = [not math.isnan(number) for number in myArray3]
print(myArray1)
print(myArray2)
print(myArray3)
print(myArray1[booleanArray1])
print(myArray2[booleanArray2])
print(myArray3[booleanArray3])
输出:
[ 1. 2. 3. nan nan 4. 5. 6. nan 7. 8. 9. nan]
[nan nan nan nan nan nan]
[ 1 2 3 4 5 6 7 8 9 10]
[1. 2. 3. 4. 5. 6. 7. 8. 9.]
[]
[ 1 2 3 4 5 6 7 8 9 10]
使用 pandas.isnull
方法删除 Nan 值
以下是使用 pandas
中的 isnull()
方法的解决方案。
import numpy as np
import pandas as pd
myArray1 = np.array([1, 2, 3, np.nan, np.nan, 4, 5, 6, np.nan, 7, 8, 9, np.nan])
myArray2 = np.array([np.nan, np.nan, np.nan, np.nan, np.nan, np.nan])
myArray3 = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
booleanArray1 = [not pd.isnull(number) for number in myArray1]
booleanArray2 = [not pd.isnull(number) for number in myArray2]
booleanArray3 = [not pd.isnull(number) for number in myArray3]
print(myArray1)
print(myArray2)
print(myArray3)
print(myArray1[booleanArray1])
print(myArray2[booleanArray2])
print(myArray3[booleanArray3])
print(myArray1[~pd.isnull(myArray1)]) # Line 1
print(myArray2[~pd.isnull(myArray2)]) # Line 2
print(myArray3[~pd.isnull(myArray3)]) # Line 3
输出:
[ 1. 2. 3. nan nan 4. 5. 6. nan 7. 8. 9. nan]
[nan nan nan nan nan nan]
[ 1 2 3 4 5 6 7 8 9 10]
[1. 2. 3. 4. 5. 6. 7. 8. 9.]
[]
[ 1 2 3 4 5 6 7 8 9 10]
[1. 2. 3. 4. 5. 6. 7. 8. 9.]
[]
[ 1 2 3 4 5 6 7 8 9 10]
相关文章
在 Python 中将 Tensor 转换为 NumPy 数组
发布时间:2024/03/12 浏览次数:118 分类:Python
-
在 Python 中,可以使用 3 种主要方法将 Tensor 转换为 NumPy 数组:Tensor.numpy()函数,Tensor.eval()函数和 TensorFlow.Session()函数。
在 Python 中将 CSV 读取为 NumPy 数组
发布时间:2024/03/12 浏览次数:118 分类:Python
-
本教程演示如何在 Python 中将 CSV 读取为 NumPy 数组。
将 PIL 图像转换为 NumPy 数组
发布时间:2024/03/12 浏览次数:153 分类:Python
-
在 Python 中,可以使用两种主要方法将 PIL 图像转换为 3 维 NumPy 数组:numpy.array()函数和 numpy.asarray()函数。
Python NumPy 中的逐元素除法
发布时间:2024/03/12 浏览次数:177 分类:Python
-
有两种主要方法可用于在 Python 中对 NumPy 数组执行逐元素除法,即 numpy.divide() 函数和 / 运算符。
如何在 Matplotlib Pyplot 中显示网格
发布时间:2024/02/04 浏览次数:128 分类:Python
-
本文演示了如何在 Python Matplotlib 中在一个图上画一个网格。使用 grid()函数来绘制网格,并解释了如何改变网格颜色和线条类型。
在 Matplotlib 中的图中添加文字
发布时间:2024/02/04 浏览次数:152 分类:Python
-
本教程展示了我们如何使用 plt.text()方法在 Matplotlib 中为图或轴添加文字。