【问题标题】:How to convert a 2D array of strings and numbers to a numpy float array?如何将字符串和数字的二维数组转换为 numpy 浮点数组?
【发布时间】:2021-10-24 15:44:36
【问题描述】:

我的数组是 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]])

【问题讨论】:

标签: python arrays numpy


【解决方案1】:

我的解决方案遍历展平数组并检查每种类型是否可以是浮点数。如果不是,我将填写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.]])

【讨论】:

    【解决方案2】:

    按照建议的here 使用genfromtext 对多维数组是不可能的。另一方面,您可以使用apply_along_axisgenfromtext 应用于二维数组的每一行,如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.]]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-09
      • 1970-01-01
      • 2020-07-12
      • 2021-12-28
      • 2021-01-28
      • 2011-04-22
      • 2011-07-18
      相关资源
      最近更新 更多