首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >列表操作,在跳过列表中的其他数据时转换字母数字数据

列表操作,在跳过列表中的其他数据时转换字母数字数据
EN

Stack Overflow用户
提问于 2020-01-06 06:11:29
回答 2查看 52关注 0票数 0

感谢您能提供的任何帮助。如果还有其他关于这个问题的帖子/视频/文章,我很乐意去看看。

语言: Python

我的问题:什么是正确的方式来构造下面的代码,以跳过列表= num中的"N/A“和"Dec 25 2019”。

我找到了如何将字母数字值"1.19T“转换为浮点数的答案,但我不知道如何跳过列表中的日期和"N/A”。任何帮助都会很感谢,谢谢。

代码语言:javascript
运行
复制
num = ["11.1", "1.19T", "22.14", "2.09B", "4.57%", "12.92", "N/A", "Dec 25 2019"]
units = {"M": 1_000, "B": 1_000_000, "T": 1_000_000_000, "": 1, "%": .01}
result = []
for n in num:
        try:
            result.append(float(n))
        except ValueError:
            unit = n[-1]
            n = float(n[:-1])
            result.append(n * units[unit])

print(result)
EN

Stack Overflow用户

发布于 2020-01-06 06:45:02

使用re

首先,我必须从你的units中删除空字符串密钥

代码语言:javascript
运行
复制
units = {"M": 1_000, "B": 1_000_000, "T": 1_000_000_000, "%": .01}

然后,我遍历所有元素和所有保存的单元,以将所有文字修改为正确的算术运算:

代码语言:javascript
运行
复制
>>> num_formatted=[]
>>> for el in num:
...     x=el
...     for k in units:
...         x=re.sub(r"([0-9\.]+)"+k, r"(\1 * "+str(units[k])+")", x)
...     num_formatted.append(x)
...
>>> print(num_formatted)
['11.1', '(1.19 * 1000000000)', '22.14', '(2.09 * 1000000)', '(4.57 * 0.01)', '12.92', 'N/A', 'Dec 25 2019']

多亏了这种方法,你可以有一个以上的单位每个文字,并且一切都应该算术计算正确。

一旦完成,我们就可以eval所有的格式化操作了:

代码语言:javascript
运行
复制
>>> import numpy as np
>>> num_formatted_final=[]
>>> for el in num_formatted:
...     try:
...         num_formatted_final.append(eval(el))
...     except:
...         num_formatted_final.append(np.nan) #You can put None instead - I suppose np.nan is more logical choice here
...
>>> num_formatted_final
[11.1, 1190000000.0, 22.14, 2089999.9999999998, 0.045700000000000005, 12.92, nan, nan]
票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59604657

复制
相关文章

相似问题

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