如何将以Python文本forms导入的数据分隔成date数组和数字数据

我有一个Excel电子表格,其中第一列的date,其余的是每个属性观察到的数值。 我使用read / readlines函数导入了整个数据集。

如何将导入的数据分隔到datearray(导入数据集中的第一列)和一个单独的数值matrix(我想要处理的数据)?

例如:

我正在导入以下数据:

观察date属性1属性2属性3

01/01/2012 105 101 100

02/01/2012 101 101 95

03/01/2012 98 95 97

我想从这个数据创build以下内容:

DateArrayList = [01/01/2012,02/01/2012,03/01/2012]

105 101 100 

值matrix= 101 101 95

  98 95 97 

这些列表parsing应该做你正在寻找的(假设数据在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]] 

如果你已经在使用numpy了,这里是“numpythonic”解决scheme…(但是如果你不是其他解决scheme,那么其他解决scheme会更好)。

在最新版本的numpy中,有一个datetime dtype。 在此之前,最常见的解决scheme是使用matplotlib的date格式(这是一个浮点数)。

首先,如果你想依赖matplolib的date格式,你可以这样做:

 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作为date数组。 在这种情况下(使用两次):

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