Как преобразовать массив дат (формат «мм / дд / гг чч: мм: сс») в цифры? - PullRequest
1 голос
/ 24 декабря 2011

Я недавно (1 неделя) решил перенести свою работу на Python из matlab.Так как я привык к matlab, мне иногда трудно получить точный эквивалент того, что я хочу сделать в python.

Вот моя проблема:

У меня есть набор CSV-файлов, которые я хочу обработать.До сих пор мне удалось загрузить их в группы.Каждый столбец имеет размер больше 600000 x 1. В одном из столбцов в файле csv находится время, которое имеет формат «мм / дд / гг чч: мм: сс».Я хочу преобразовать столбец времени в число и для этого я использую date2num из matplot libЕсть ли «матричный» способ сделать это?Команда в Matlab для этого - datenum (время, 'мм / дд / гггг ЧЧ: ММ: СС'), где время - матрица 600000 x 1.

Спасибо

ВотПример кода, о котором я говорю:

import csv
import time
import datetime from datetime
import date from matplotlib.dates
import date2num

time = []
otherColumns = []

for d in csv.DictReader(open('MyFile.csv')):
      time.append(str(d['time']))
      otherColumns.append(float(d['otherColumns']))

timeNumeric = date2num(datetime.datetime.strptime(time,"%d/%m/%y %H:%M:%S" ))

Ответы [ 2 ]

0 голосов
/ 24 декабря 2011

вы можете использовать генератор:

def pre_process(dict_sequence):
    for d in dict_sequence:
        d['time'] = date2num(datetime.datetime.strptime(d['time'],"%d/%m/%y %H:%M:%S" ))
    yield d

Теперь вы можете обработать свой CSV:

for d in pre_process(csv.DictReader(open('MyFile.csv'))):
    process(d)

преимущество этого решения в том, что оно не копирует потенциально большие последовательности.

Edit:

То есть содержимое файла в массиве numpy?

reader = csv.DictReader(open('MyFile.csv'))
#you might want to get rid of the intermediate list if the file is really big.
data = numpy.array(list(d.values() for d in pre_process(reader)))

Теперь у вас есть хороший большой массив, который позволяет выполнять все виды операций. Вы хотите, чтобы только первый столбец получил матрицу 600000x1:

data[:,0]  # assuming time is the first column
0 голосов
/ 24 декабря 2011

Ближайшая вещь в Python для матричной / векторной операции matlab - это понимание списка. Если вы хотите применить функцию Python к каждому элементу в списке, вы можете сделать:

new_list = [date2num(data) for data in old_list]

или

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