如何用numpy数组中的空白替换np.nan

how to replace np.nan with blank in numpy array

如何将 numpy 数组中的 nan 替换为空白或空字符串。我用谷歌搜索它,它还在 pandas 数据帧而不是 numpy 数组中与 nan 相关。

试试这个:

dfCopy = df.replace(np.nan, '', regex=True)

查看替换文档here

您可以使用 built-in 函数来替换特定值,例如:

import numpy as np

arr = np.array((np.nan, 1, 0, np.nan, -42))

arr[np.isnan(arr)] = -100

print(arr)

输出将是:

array([-100.,    1.,    0., -100.,  -42.])

注意:您应该注意将 np.nan 替换为什么值,因为它应该与数组的类型相同(即,如果您的数组是 str 类型,您可以将其替换为空字符串)。

使用 fillna np 方法:

例如:

df2 = df.fillna("")

您还可以将 berween numpy 数组转换为 dataFram,如下所示:

df = pd.DataFrame(numpy_array)

更多请查看以下内容: https://sparkbyexamples.com/pandas/pandas-replace-nan-with-blank-empty-string/#:~:text=Convert%20Nan%20to%20Empty%20String,in%20the%20Pandas%20DataFrame%20column.

您可以使用 np.where() 方法以这种方式执行此操作:

a = np.array([[nan, 2], [3, nan]])
a = np.where(np.isnan(a), '', a)
print(a)

输出:

[['' '2.0']
 ['3.0' '']]

Process finished with exit code 0

此外,如果您想用数值替换它,您可以使用 np.nan_to_num() 方法:

a = np.array([[nan, 2], [3, nan]])
a = np.nan_to_num(a, nan=0)
print(a)

输出:

[[0. 2.]
 [3. 0.]]

Process finished with exit code 0

具有 np.nan 的数组将是 float dtype(我们不在这里谈论 object dtypes :))

In [274]: arr = np.array([1,2,np.nan, 4,np.nan])
In [275]: arr
Out[275]: array([ 1.,  2., nan,  4., nan])
In [277]: arr[[2,4]]
Out[277]: array([nan, nan])

我们不能用字符串替换此类数组中的任何值!

In [278]: arr[[2,4]] = ' '
Traceback (most recent call last):
  Input In [278] in <cell line: 1>
    arr[[2,4]] = ' '
ValueError: could not convert string to float: ''

但是如果我们首先将 float dtype 转换为 string:

In [279]: sarr = arr.astype(str)
In [280]: sarr
Out[280]: array(['1.0', '2.0', 'nan', '4.0', 'nan'], dtype='<U32')
In [281]: sarr[[2,4]] = ' '
In [282]: sarr
Out[282]: array(['1.0', '2.0', ' ', '4.0', ' '], dtype='<U32')

在字符串 dtype 数组中,'nan' 并不特殊,不像在浮点数中。

我们要用isnan来识别浮点数nan:

In [283]: np.isnan(arr)
Out[283]: array([False, False,  True, False,  True])
In [284]: np.nonzero(np.isnan(arr))
Out[284]: (array([2, 4]),)

但使用普通 == 来测试字符串 'nan':

In [285]: sarr = arr.astype(str)
In [286]: sarr == 'nan'
Out[286]: array([False, False,  True, False,  True])

几个答案建议 pandas - 如:

In [287]: S = pd.Series(arr)
In [288]: S
Out[288]: 
0    1.0
1    2.0
2    NaN
3    4.0
4    NaN
dtype: float64
In [289]: S.replace?
In [290]: S.replace(np.nan, ' ')
Out[290]: 
0    1.0
1    2.0
2       
3    4.0
4       
dtype: object

注意数据类型的变化——从浮点数到对象。在本例中,该系列包含浮点数和字符串。

In [292]: _.to_numpy()
Out[292]: array([1.0, 2.0, ' ', 4.0, ' '], dtype=object)