当前位置: 首页 > 面试题库 >

用NAN替换强制转换非数字numpy数组

邴星洲
2023-03-14
问题内容

考虑数组

x = np.array(['1', '2', 'a'])

绑定转换为float数组会引发异常

x.astype(np.float)
ValueError: could not convert string to float: a

numpy是否提供任何有效的方法将其强制转换为数字数组,并用NAN等替代非数字值?

或者,是否有一个等效于的有效numpy函数np.isnan,但是该函数还可以测试字母之类的非数字元素?


问题答案:

您可以使用以下方式将字符串数组转换为浮点数组(带有NaN)np.genfromtxt

In [83]: np.set_printoptions(precision=3, suppress=True)

In [84]: np.genfromtxt(np.array(['1','2','3.14','1e-3','b','nan','inf','-inf']))
Out[84]: array([ 1.   ,  2.   ,  3.14 ,  0.001,    nan,    nan,    inf,   -inf])

这是一种识别“数字”字符串的方法:

In [34]: x
Out[34]: 
array(['1', '2', 'a'], 
      dtype='|S1')

In [35]: x.astype('unicode')
Out[35]: 
array([u'1', u'2', u'a'], 
      dtype='<U1')

In [36]: np.char.isnumeric(x.astype('unicode'))
Out[36]: array([ True,  True, False], dtype=bool)

请注意,“数字”是指仅包含数字字符的Unicode,即具有Unicode数值属性的字符。它 包括小数点。因此u'1.3'不被视为“数字”。



 类似资料:
  • 问题内容: 我有一个numpy数组,其中大多数都用实数填充,但是其中也包含一些值。 如何用列的平均值替换s? 问题答案: 无需循环:

  • 我希望将一个< code>int数组转换为一个< code>double数组。 所以,当我有 我想使用,比如说把它作为参数传递给一个方法。 最好的方法是什么? 演员阵容 不工作。 我可以迭代通过: 有没有更好的方法来做到这一点? <代码>系统。arraycopy不起作用——不适用于两种不同基元类型的数组。 注意:在Java和其他一些讨论中,我们看到了将对象转换为数组。 蒂亚。

  • 那么谁能解释一下这里的区别是什么,为什么java会做这样的设计呢?多谢了。 编辑:一个类似的问题

  • 问题内容: 假设我有字符串: 我得到的位置无关紧要,但是为了具体起见,假设我从二进制文件中读取了它。 我知道我的字符串是4(4字节)浮点数的二进制表示形式。我想将那些浮点数作为一个numpy数组。我 可以 做: 但是创建中间元组似乎很愚蠢。有没有一种方法可以在不创建中间元组的情况下执行此操作? 编辑 我还希望能够以可以指定字符串的字节序的方式构造数组。 问题答案: 或者,如果您想要大端字节序: 的

  • 我有一个数据框,如下所示: 我想用一个空字符串删除NaN值,这样看起来像这样:

  • 给定如下所示的数据帧 您可能会注意到,这里所有的列都已转换为类型。是否有办法将某些列转换为? 尝试了以下方法 这会引发错误 阅读有关可为空的整数数据类型的信息,然后重试 这会引发错误