我有几个大的以逗号分隔的数据集,其中包含浮点数(数十万),但有些值可能会丢失(通常没有丢失,或只有几百个),并使用字符串{{1标记为null }}。我想将所有值转换为实际的float类型数据,并将它们存储在列表中以供进一步处理。
我使用以下代码和"null"
语句(这是更为pythonic的方式AFAIK)将字符串转换为浮点数,如果引发异常,我会检查是否由于{而引发了异常{1}}价值。如果try-except
值导致异常,我只需"null"
。否则,我提出异常。请记住,在典型的数据集中,没有或很少有例外。
"null"
这很好用,但我意识到,偶尔我会得到一个包含大量pass
值(数千)的数据集,上面的代码需要很长时间才能执行(几分钟或几小时,相比之下)通常会在几秒钟内处理完毕!)
然后我尝试添加try:
num = float(string)
except ValueError:
if string == "null"
pass
else:
raise ValueError
语句,以便首先检查字符串值是否等于"null"
,并且只有当字符串不是if
时才尝试转换float函数的字符串。在这种情况下,我将在典型数据集中进行许多冗余字符串比较,只有很少或没有"null"
值:
"null"
通过以下代码示例,我测量了两种方式的执行时间,令我惊讶的是,当我添加额外的"null"
语句时,我会看到,除非出现意外的非浮点字符串,否则会避免所有异常除try:
if string != "null":
num = float(string)
except:
print("String {} could not be converted to float".format(string))
raise
以外,我的代码执行得更快。
if
示例执行输出:
"null"
有人可以解释为什么会这样吗?实现这个的最佳方法是什么?