Как разделить данные, импортированные как текстовые в Python, в массив данных и числовые данные - PullRequest
1 голос
/ 31 января 2012

У меня есть таблица Excel, в которой даты указаны в первом столбце, а остальные - числовые значения, наблюдаемые для каждого атрибута. Я импортировал весь набор данных, используя функцию чтения / чтения строк.

Как разделить импортированные данные на массив дат (первый столбец в импортированном наборе данных) и отдельную матрицу числовых значений (данные, с которыми я хочу работать)?

Например:

Я импортирую следующие данные:

Атрибут ObservationDate1 Атрибут2 Атрибут3

01/01/2012 105 101 100

02/01/2012 101 101 95

03/01/2012 98 95 97

Я хотел бы создать из этих данных следующее:

DateArrayList = [01.01.2012, 02.01.2012, 03.01.2012]

             105        101         100   

ValuesMatrix = 101 101 95

             98         95          97

Ответы [ 2 ]

1 голос
/ 31 января 2012

Эти списки должны делать то, что вы ищете (предположим, что данные находятся в testdata.xls и разделены табуляцией):

with open("testdata.xls") as inf:
    next(inf)
    lines = [l[:-1].split("\t") for l in inf]

date_array_list = [l[0] for l in lines]
values_matrix = [map(int, l[1:]) for l in lines]

print date_array_list
print values_matrix

Это печатает

['01/01/2012', '02/01/2012', '03/01/2012']
[[105, 101, 100], [101, 101, 95], [98, 95, 97]]
0 голосов
/ 31 января 2012

Если вы уже используете numpy, вот «numpythonic» решение ... (Хотя другие решения лучше, если вы не.)

В последних версиях numpy есть dtime datetime,До этого наиболее распространенным решением было использование формата даты matplotlib (который является числом с плавающей запятой).

Для начала, вот как вы это сделаете, если хотите полагаться на формат даты matplolib:

import matplotlib.dates as mdates
import numpy as np

data = np.loadtxt('data.txt', converters={0:mdates.datestr2num})
dates = data[:,0]
data = data[:,1:]

В более поздних версиях numpy вы можете использовать datetime64 dtype для массива даты.В этом случае (используя два прохода):

import numpy as np
dates = np.loadtxt('data.txt', dtype=np.datetime64, usecols=[0])
data = np.loadtxt('data.txt', converters={0:lambda x: -9999.9})
data = data[:,1:]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...