非数值numpy数组的NAN-replacemen强制转换

2024-05-23 15:26:16 发布

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

考虑数组

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

绑定以转换为浮点数组会引发异常

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

numpy是否提供了任何有效的方法将其强制转换为数值数组,用NAN之类的东西替换非数值?

或者,是否有一个有效的numpy函数相当于np.isnan,但它也测试非数字元素,如字母?


Tags: to方法numpyconvertstringnpnot数组
2条回答

如果您碰巧也在使用pandas,那么可以使用^{}方法:

In [1]: import numpy as np

In [2]: import pandas as pd

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

In [4]: pd.to_numeric(x, errors='coerce')
Out[4]: array([  1.,   2.,  nan])

可以使用^{}将字符串数组转换为浮点数组(带NaNs):

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)

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

相关问题 更多 >