Python 如何将带有数字和非数字项的numpy数组转换为所有浮点
我有一个混合了不同数据类型的numpy数组:float、int和string。我想将所有浮点和整数转换为浮点,同时保留非数字项不变。目前,当我这样做时:Python 如何将带有数字和非数字项的numpy数组转换为所有浮点,python,pandas,numpy,types,Python,Pandas,Numpy,Types,我有一个混合了不同数据类型的numpy数组:float、int和string。我想将所有浮点和整数转换为浮点,同时保留非数字项不变。目前,当我这样做时: array = np.array(['1', '2', '3', 'string']) array.astype(np.float64) 我得到以下错误: ValueError: could not convert string to float: 'string' 我希望输出如下所示: np.array([1.0, 2.0, 3.0, '
array = np.array(['1', '2', '3', 'string'])
array.astype(np.float64)
我得到以下错误:
ValueError: could not convert string to float: 'string'
我希望输出如下所示:
np.array([1.0, 2.0, 3.0, 'string'])
我也尝试过pd.is_numeric(),但无法理解。这是可行的,还是违反了numpy数组的规则?您想要的结果是不可能的,因为np.array只能有一种数据类型(通常是数字类型之一,例如float、int等)。。。除非您选择泛型类型
dtype=object
,否则您将失去所有的numpy优点(即所有针对数值的优化)。那你为什么要这么做
如果这真的是您想要的,请尝试以下方法:
array = np.array(['1', '2', '3', 'string'])
def safe_float(x):
try:
x = float(x)
except:
pass
return x
array = np.array(list(map(safe_float, array)), dtype=object)
print(array)
array([1.0, 2.0, 3.0, 'string'], dtype=object)