我使用以下代码块将文件'f'中的行读入嵌套列表:
for data in f:
clean_data = data.rstrip()
data = clean_data.split('\t')
t += [data[0]]
strmat += [data[1:]]
但是,有时数据不完整,行可能如下所示:
['955.159', '62.8168', '', '', '', '', '', '', '', '', '', '', '', '', '', '29', '30', '0', '0']
它使用扳手,因为我希望Python隐式地将我的列表强制转换为浮点数,但空字段''使它被转换为字符串数组(dtype:s12)。
我可以启动第二个'if'语句并将所有空字段转换为NULL(因为在这个例子中0是错误的)但我不确定这是否是最好的。
答案 0 :(得分:1)
应如何处理不完整的值取决于应用程序的上下文(您尚未提及)。
例如,您可以简单地忽略缺失值
>>> l = ['955.159', '62.8168', '', '', '', '', '', '', '', '', '', '', '', '', '', '29', '30', '0', '0']
>>> filter(bool, l) # remove empty values
['955.159', '62.8168', '29', '30', '0', '0']
>>> map(float, filter(bool, l)) # remove empty values and convert the rest to floats
[955.15899999999999, 62.816800000000001, 29.0, 30.0, 0.0, 0.0]
或者,如您所述,您可能希望将其替换为NULL
:
>>> map(lambda x: x or 'NULL', l)
['955.159', '62.8168', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', '29', '30', '0', '0']
如您所见,处理不完整数据的策略有很多种。无论如何,这里的示例片段可能会帮助您为您的任务选择合适的片段。正如你所看到的,我更喜欢像build-ins这样的函数式编程来做这样的事情,因为它通常是最简单和最简单的方法(我不认为执行时间会有明显的差异)