处理文件中不完整数据行的最佳策略

时间:2010-06-16 14:12:13

标签: python arrays file list nested

我使用以下代码块将文件'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是错误的)但我不确定这是否是最好的。

  1. 这是处理不完整数据的最佳策略吗?
  2. 我应该编辑流还是事后做?

1 个答案:

答案 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这样的函数式编程来做这样的事情,因为它通常是最简单和最简单的方法(我不认为执行时间会有明显的差异)