如何将字符串和数字的2D数组转换为numpy浮点数组?

2024-09-30 20:23:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我的数组是2D numpystr352,包含数字和字符串的混合体。 我想将它转换为float numpy,这样字符串元素应该转换为nan(不使用Pandas)

例如:

import numpy as np

x = np.array([[1, 2, 'tom'], [4, 'Manu', 6]])

我想要的是:

x = np.array([[1, 2, nan], [4, nan, 6]])

Tags: 字符串importnumpy元素pandasasnp数字
2条回答

我的解决方案在展平的数组上迭代,并检查每种类型是否可以是float。如果没有,我将填写一个np.NaN。在此之后,我将使用dtype float将numpy数组重新创建为旧形状:

import numpy as np

x = np.array([[1, 2, 'tom'], [4, 'Manu', 6]])

shape = x.shape
x_nan = np.empty_like(x).flatten()
for i,x in enumerate(x.flat):
    try:
        x_nan[i] = float(x)
    except:
        x_nan[i] = np.NaN

x_nan = np.array(x_nan, dtype=np.float).reshape(shape)
print(x_nan)
# array([[ 1.,  2., nan],
#        [ 4., nan,  6.]])

在多维数组中不可能使用建议的^{}here。另一方面,您可以使用^{}genfromtext应用于2D数组的每一行,如here所述:

import numpy as np

x = np.array([[1, 2, 'tom'], [4, 'Manu', 6]])
print(np.apply_along_axis(np.genfromtxt, 1 ,x))

这将提供:

[[ 1.  2. nan]
 [ 4. nan  6.]]

相关问题 更多 >