处理金融机构不完整数据行的最佳策略

2024-04-23 18:39:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用以下代码块将文件“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隐式地将我的列表转换为float,但是空字段“”导致它转换为字符串数组(dtype:s12)。你知道吗

我可以启动第二个“if”语句并将所有空字段转换为NULL(因为在本例中0是错误的),但我不确定这是否是最好的。你知道吗

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

Tags: 文件数据字符串代码inclean列表for
1条回答
网友
1楼 · 发布于 2024-04-23 18:39:34

处理不完整值的方式取决于应用程序的上下文(您还没有提到)。你知道吗

例如,可以忽略缺少的值

>>> 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']

如您所见,处理不完整数据有许多不同的策略。无论如何,这里的示例代码段可能会帮助您为任务选择正确的代码段。如您所见,我更喜欢函数式编程,比如内置程序,因为它通常是最短、最简单的方法(我不认为在执行时间上会有任何明显的差异)。你知道吗

相关问题 更多 >