2014-11-28 4 views
0

Я в настоящее время импортирую некоторые csv и анализируя данные с помощью python. Один столбец, в частности, имеет разные форматы, и я не совсем уверен, какой подход я должен использовать для анализа данных.Как следует анализировать эти данные?

Данные в этом столбце может иметь следующие форматы

5.00 LBS 
5.00LBS 
5.00lbs 
5LBS 
5 LBS 
5 kg 

или любой другой единицы

То, что я хотел бы сделать, это сохранить номер в одной переменной и единицы в другую, так что я могу позже используйте их в моей модели Django и создайте объект.

import csv 
def import_measurements(request): 
    path = 'measurements.csv' 
    with open(path) as f: 
     reader = csv.reader(f) 
     for row in reader: 
      # unit = row[0] string portion 
      # weight = row[0] number portion 
      created = Measurements.objects.create(
          unit=unit, 
          weight=weight 
      ) 

Любая помощь будет оценена

+0

Если вы покажете ваш код даже извлечения данных из 'csv', то мы можем вам помочь ! цель SO не дать вам ответ, но помочь решить проблемы! что вы столкнулись! – Kasramvd

+0

Я попросил подход не решение. Я могу и предпочел бы сам решить это решение. Мне просто хотелось бы получить информацию о возможных методах, которые можно использовать для эффективного и правильного решения. Спасибо – d9120

ответ

1

Очевидно, ваше значение состоит из 2-х частей: число (десятичное или нет), и блок (фунты или кг), отделенный от дополнительного пространства.

Я хотел бы использовать регулярное выражение в виде:

(\d(?:\.\d{2})?)\s?((?:lbs)|(?:kg)) 

Использование i флага игнорировать регистр.

Первая группа будет содержать 5 или 5.00, а вторая - блок. Опустите блок, и у вас оно есть.

В качестве упражнения для читателя можно использовать различные десятичные разделители (например, ,), а также для поддержки тысяч разделителей.

Более расслаблен, но, следовательно, менее строгое выражение может быть:

([0-9.]+)\s?(\w+) 
1

вы можете использовать regx:

>>> doc 
'5.00 LBS\n5.00LBS\n5.00lbs\n5LBS\n5 LBS\n5 kg' 
>>> re.findall('(\d+\.?\d*)\s*([a-zA-Z]+)',doc) 
[('5.00', 'LBS'), ('5.00', 'LBS'), ('5.00', 'lbs'), ('5', 'LBS'), ('5', 'LBS'), ('5', 'kg')] 
Смежные вопросы