如何将在Python中作为文本导入的数据分成日期阵列和数值数据

时间:2012-01-31 16:17:38

标签: python excel import

我有一个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

2 个答案:

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