Лучшая стратегия для работы с неполными строками данных из файла - PullRequest
0 голосов
/ 16 июня 2010

Я использую следующий блок кода для чтения строк из файла '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. Должен ли я редактировать поток или делать это пост-hoc?

1 Ответ

1 голос
/ 16 июня 2010

Способ работы с неполными значениями зависит от контекста вашего приложения (о котором вы еще не упомянули).

Например, вы можете просто игнорировать пропущенные значения

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

Как видите, существует много разных стратегий работы с неполными данными.В любом случае, приведенные здесь примеры фрагментов могут помочь вам выбрать правильный вариант для вашей задачи.И, как вы можете видеть, я предпочитаю функциональное программирование, такое как встроенные модули, для выполнения подобных вещей, потому что это часто самый короткий и простой способ сделать это (и я не думаю, что будут какие-либо заметные различия во времени выполнения).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...