如何用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)
您可以使用 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)
如何将 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)
您可以使用 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)