Форматирование данных "Kilo", "Mega", "Gig" в массиве записей - PullRequest
3 голосов
/ 30 марта 2012

Я пытаюсь построить что-то в формате csv: отметка времени, значение. Но значения не являются действительными числами, а скорее сокращениями больших значений (k = 1000, M = 1000000 и т. Д.).

2012-02-24 09:07:01, 8.1M
2012-02-24 09:07:02, 64.8M
2012-02-24 09:07:03, 84.8M
2012-02-24 09:07:04, 84.8M
2012-02-24 09:07:05, 84.8M
2012-02-24 09:07:07, 84.8M
2012-02-24 09:07:08, 84.8M
2012-02-24 09:07:09, 84.8M
2012-02-24 09:07:10, 84.8M

Я обычно использую массив numpy record для хранения CSV, используя matplotlib.mlab.csv2rec(infile). Но работает только если значения не в сокращенном виде. Есть ли простой способ сделать это без того, чтобы моя программа считывала каждое значение и искала букву «М» для преобразования 84,8M в 84800000?

Ответы [ 2 ]

5 голосов
/ 30 марта 2012

Другая возможность - следующая функция преобразования:

conv = dict(zip('kMGT', (3, 6, 9, 12)))
def parse_number(value):
  if value[-1] in conv:
    value = '{}e{}'.format(value[:-1], conv[value[-1]])
  return float(value)

Пример:

>>> parse_number('1337')
1337.0
>>> parse_number('8.1k')
8100.0
>>> parse_number('8.1M')
8100000.0
>>> parse_number('64.367G')
64367000000.0
2 голосов
/ 31 марта 2012

Вы можете использовать функцию Никласа Б. в аргументе convertd в csv2rec:

>>> data = mlab.csv2rec(infile, names=['datetime', 'values'],
...                     convertd={'values': parse_number})
>>> data
rec.array([(datetime.datetime(2012, 2, 24, 9, 7, 1), 8100000.0),
   (datetime.datetime(2012, 2, 24, 9, 7, 2), 64800000.0),
   (datetime.datetime(2012, 2, 24, 9, 7, 3), 84800000.0),
   (datetime.datetime(2012, 2, 24, 9, 7, 4), 84800000.0),
   (datetime.datetime(2012, 2, 24, 9, 7, 5), 84800000.0),
   (datetime.datetime(2012, 2, 24, 9, 7, 7), 84800000.0),
   (datetime.datetime(2012, 2, 24, 9, 7, 8), 84800000.0),
   (datetime.datetime(2012, 2, 24, 9, 7, 9), 84800000.0),
   (datetime.datetime(2012, 2, 24, 9, 7, 10), 84800000.0)], 
  dtype=[('datetime', '|O8'), ('values', '<f8')])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...