我有一个excel电子表格,在第一列中有日期,其余的是为每个属性观察到的数值。我使用read / readlines函数导入了整个数据集。
如何将导入的数据分隔为datearray(导入数据集中的第一列)和单独的数值矩阵(我想要处理的数据)?
例如:
我正在导入以下数据:
ObservationDate Attribute1 Attribute2 Attribute3
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
答案 0 :(得分:1)
这些列表推导应该做你想要的(假设数据在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]]
答案 1 :(得分:0)
如果你已经在使用numpy,那么这就是“numpythonic”解决方案......(如果你没有,其他解决方案会更好。)
在numpy的最新版本中,有一个datetime dtype。在此之前,最常见的解决方案是使用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:]