Python 列表操作,转换字母数字数据,同时跳过列表中的其他数据
谢谢你能提供的帮助。如果还有其他与这个问题相关的帖子/视频/文章,我很乐意查看 语言:Python 我的问题是:如何正确地构造下面的代码来跳过列表中的“N/A”和“2019年12月25日”=num 我找到了如何将字母数字值(如“1.19T”)转换为浮点数的答案,但我不知道如何跳过列表中的日期和“N/A”。任何帮助都将不胜感激,谢谢Python 列表操作,转换字母数字数据,同时跳过列表中的其他数据,python,list,dictionary,alphanumeric,string-conversion,Python,List,Dictionary,Alphanumeric,String Conversion,谢谢你能提供的帮助。如果还有其他与这个问题相关的帖子/视频/文章,我很乐意查看 语言:Python 我的问题是:如何正确地构造下面的代码来跳过列表中的“N/A”和“2019年12月25日”=num 我找到了如何将字母数字值(如“1.19T”)转换为浮点数的答案,但我不知道如何跳过列表中的日期和“N/A”。任何帮助都将不胜感激,谢谢 num = ["11.1", "1.19T", "22.14", "2.09B", "4.57%", "12.92", "N/A", "Dec 25 2019"] u
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)
基本上,您试图将单元处理与无效值分开,因为现在它们由相同的try/except语句提供服务。一个(但不是唯一的)解决方案是显式处理单元:
for n in num:
try:
if n[-1] in units:
n = float(n[:-1]) * units[n[-1]]
else:
n = float(n)
except ValueError:
continue
result.append(n)
注释中建议的另一种方法是使用嵌套的try/except块。但是,“显式比隐式好”,所以我更喜欢上面的一个。使用re
:
首先,我必须从您的单元中删除空字符串键
:
units={“M”:1000,“B”:1000,“T”:1000,“%”:.01}
然后我遍历所有元素和所有保存的单位,以将所有文字修改为正确的算术运算:
>>num\u formatted=[]
>>>对于el in num:
... x=el
... 以单位表示的k:
... x=re.sub(r“([0-9\.]+)”+k,r“(\1*”+str(单位[k])+”),x)
... num_格式化。追加(x)
...
>>>打印(num_格式)
[11.1'、'(1.19*100000000)'、'22.14'、'(2.09*1000000)'、'4.57*0.01'、'12.92'、'N/A'、'2019年12月25日'
多亏了这种方法,每个文本可以有多个单位,所有的计算都应该是算术正确的
一旦完成,我们就可以eval
所有格式化操作:
>>将numpy作为np导入
>>>num_formatted_final=[]
>>>对于以num_格式显示的el:
... 尝试:
... num_格式_final.append(eval(el))
... 除:
... num_formatted_final.append(np.nan)#您可以将None替换为None-我认为np.nan是更符合逻辑的选择
...
>>>num_格式_最终
[11.1190000000.0,22.142089999.999999998,0.04570000000000005,12.92,nan,nan]
这些数据来自哪里?使用None
可能比使用神奇字符串要好得多。您能提供更多的上下文/信息吗?明智的做法是将数据拆分为同质部分,而不是混合不同的数据格式。但如果您坚持将所有字符串存储到一个列表中(或者如果它们在输入时是混合的),那么regex似乎是您唯一的选择。这里的危险在于日期本身有许多不同的格式。您可以在外部的except
子句中添加另一个try/except
,这样,如果第二次转换失败,它将继续。我只是想通过从“估值指标”和“财务亮点”中提取信息,更好地理解Python的网络抓取。