首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >只保存来自numpy字符串数组的数字信息。

只保存来自numpy字符串数组的数字信息。
EN

Stack Overflow用户
提问于 2022-01-21 02:08:53
回答 2查看 575关注 0票数 3

我只想将数字保存在不一定有效的字符串数组中。我的代码如下所示:

代码语言:javascript
运行
复制
age = train['age'].to_numpy() # 200k values
set(age)
# {'1', '2', '3', '7-11', np.nan...} 

age  = np.array(['1', '2', '3', '7-11', np.nan])

期望输出:np.array([1, 2, 3])。理想情况下,'7-11‘将是7,然而,这并不简单,是一个可容忍的损失。

np.isfinite(x)给出了"ufunc 'isfinite‘不支持输入类型,并且根据“安全”规则,不能安全地将输入强制到任何支持的类型。“

x = [num for num in age if isinstance(num, (int, float))]返回[]

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-01-21 08:27:02

这里有一个选项,它将在'-‘first上拆分字符串,并且只接受第一个值,因此'7-11’被转换为7:

代码语言:javascript
运行
复制
age = np.array(['1', '2', '3', '7-11', np.nan])
age_int = np.array([int(x[0]) for x in np.char.split(age, sep='-') if x[0].isdecimal()])

输出:array([1, 2, 3, 7])

如果您不关心‘7-11’这样的情况,那么有一个更有效的方法可以做到这一点:

代码语言:javascript
运行
复制
age_int2 = age[np.char.isdecimal(age)].astype(int)

Output2:array([1, 2, 3])

票数 2
EN

Stack Overflow用户

发布于 2022-01-21 03:07:51

你可以做以下的事情

代码语言:javascript
运行
复制
for pos, val in enumerate(age):
    try:
        new_val = int(val)
    except:
        new_val = np.nan
    age[pos] = new_val

age = age[age!="nan"].astype(int)

print(age)
> array([1, 2, 3])
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70795550

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档