我在循环中同时将值从数据集中的多个列转换为浮点数,其中我尝试跳过带有ValueError异常的错误行
我的数据已经加载了一个结构,使我可以循环它
A_floated = []
B_floated = []
for i in range(len(data)):
A = data[i]["column_A"]
B = data[i]["column_B"]
try:
A = float(A)
A_floated.append(A)
B = float(B)
B_floated.append(B)
except(ValueError):
continue
我希望异常包含A和B,因此如果中的任何包含错误行,则会为此i跳过所有这些异常,以便len(A_floated) == len(B_floated)
。现在,我只能弄清楚如何在单个列的基础上跳过坏行,但最后我得到了不同长度的浮动列。
如何做到这一点?
答案 0 :(得分:2)
如果我理解正确,您希望在迭代到A_floated
期间分别在数据结构B_floated
和data
中收集“好”(浮动)行。如果是这样,请尝试将以前的数据结构放在循环外部,并检查在将值放入列表之前是否可以将值转换为浮点数。否则,值A可以转换而值B不可转换,这将导致A_floated
和B_floated
的不同长度。总结一下,请尝试以下代码:
A_floated = []
B_floated = []
for i in range(len(data)):
A = data[i]["column_A"]
B = data[i]["column_B"]
try:
# "floatability" check.
A = float(A)
B = float(B)
# If both values can be converted into a float,
# put them into the respective lists.
A_floated.append(A)
B_floated.append(B)
except(ValueError):
continue
答案 1 :(得分:1)
如果没有异常发生,使用可以使用运行的else
clause。 try
并转换,不要在那里做任何追加,如果没有错误发生,请附加else
子句:
try:
A = float(A)
B = float(B)
except ValueError:
continue
else:
A_floated.append(A)
B_floated.append(B)
我删除了ValueError
周围的括号,因为它们不是必需的。