将n个列表中所有列表的元素转换为浮点数?

时间:2018-12-05 15:49:05

标签: python data-cleaning

我有一个列表列表,看起来像这样:

[['1', '1', '13', '23', '1.0', '9', '20051102', '20170330', '16', '9', '2', '2', '24', '46', '7232.17'], ['2', '1', '13', '23', '1.0', '9', '20051102', '20170331', '28', '4', '5', '4', '19', '51', '6171.145'], ['3', '1', '13', '23', '1.0', '9', '20051102', '20170327', '8', '3', '0', '2', '15', '14', '4666.224'], ['4', '1', '13', '23', '1.0', '9', '20051102', '20170329', '22', '2', '1', '4', '18', '42', '5479.682'], ['5', '1', '13', '23', '1.0', '9', '20051102', '20170328', '15', '5', '6', '9', '28', '37', '9411.681'], ['6', '1', '3', '27', '0.0', '9', '20051228', '20170303', '6', '1', '0', '0', '14', '21', '3757.115'], ['7', '1', '3', '27', '0.0', '9', '20051228', '20170301', '1', '0', '1', '3', '40', '45', '10521.261'], ['8', '1', '3', '27', '0.0', '9', '20051228', '20170320', '2', '0', '0', '0', '174', '171', '43113.562']

它是通过以下代码创建的: lines = [[x for x in line.strip().split(',')] for line in myfile.readlines()[1:3000]]

现在,所有列表中的所有元素都是字符串,如果我尝试 lines = [[float(x) for x in line.strip().split(',')] for line in myfile.readlines()[1:3000]]我得到一个错误。

问题是,如果我尝试类似的事情:

if str in lines: print(lines)

不返回任何内容。

我怀疑某些空字符串可能会导致此问题,例如:['2976', '1', '1', '0', '', '4', '20160630', '20170318', '0', '0', '0', '0', '8', '2', '2125.364'],其中第4个元素为空。.

该怎么办?

1 个答案:

答案 0 :(得分:2)

只需将您自己的函数写入处理空字符串的float

def myFloat(str):
    if str:
       return float(str)
    return <your_default_value> #e.g -1

然后:

lines = [[myFloat(x) for x in line.strip().split(',')] for line in myfile.readlines()[1:3000]]

,您始终可以创建没有空字符串的新列表,然后对其进行迭代。

更新:

仅在不为空字符串时才使用float(x),就像这样:

lines = [[float(x) for x in line.strip().split(',') if x] for line in myfile.readlines()[1:3000]]

请注意最后的if x