2

我正在使用numpy.loadtxt从文本文件中提取大量数据,然后使用循环将不同的列放入不同的字典键中,如下所示:

f = numpy.loadtxt(datafile, skiprows=5) # Open and read in the file, skipping to the data
d = {} # Create empty dictionary

for x in range(0, f.shape[1]):
    d[x] = f[:,x]     # Loop through the columns of the datafile, putting each one into
#a dictionary index

文本文件中数组上方的行包含数组中变量的所有标题,有没有办法获取每个变量名称并将其作为相关字典的键名?(即,第一列 = 数据,d[日期]={14/11/12,15/11/12 .... 等)

4

2 回答 2

5

Pandas 是一个好主意,所以对 reptilicus 的回答“竖起大拇指”。

如果您不想依赖 Pandas,您可以轻松地使用该函数numpy.genfromtxt将数据直接读取到 numpy 结构化数组中。结构数组的行为既像 numpy 一维数组又像字典。

例如,这是一个示例数据文件“data.csv”:

alpha, beta, gamma
100, 0.5, 19.9
210, 0.25, 21.0
240, 0.45, 15.0
290, 0.75, 5.5

您可以将其读入结构化数组,如下所示:

>>> data = genfromtxt('data.csv', delimiter=',', names=True, dtype=None)

该选项names=True告诉genfromtxt使用列标题作为结构化数组中的字段名称。设置dtype=None告诉genfromtxt自动确定列的数据类型(默认是将所有值转换为双精度浮点值)。

data看起来像这样。

>>> data
array([(100, 0.5, 19.9), (210, 0.25, 21.0), (240, 0.45, 15.0),
       (290, 0.75, 5.5)], 
      dtype=[('alpha', '<i4'), ('beta', '<f8'), ('gamma', '<f8')])

您可以访问单个元素(每个元素都是一个包含三个字段的结构):

>>> data[0]
(100, 0.5, 19.9)

或者您可以使用类似字典的界面访问列:

>>> data['beta']
array([ 0.5 ,  0.25,  0.45,  0.75])

你可以结合这些:

>>> data['beta'][1]
0.25
>>> data[1]['beta']
0.25
于 2012-10-15T17:35:22.463 回答
3

听起来你想在这里使用优秀的 Pandas 库。你当然可以做你自己想做的事,但是 Pandas 提供了一些不错的 I/O 例程,并且还内置了很多日期时间功能。例如:

In [747]: print open('foo.csv').read()
date,A,B,C
20090101,a,1,2
20090102,b,3,4
20090103,c,4,5

In [748]: data = read_csv('foo.csv')
Out[748]:
   date  A  B  C
0  20090101  a  1  2
1  20090102  b  3  4
2  20090103  c  4  5

这将创建一个数据框,类似于 Numpy 中的记录数组。您可以使用 data['date']、data['A'] 等来访问所需的列。

更多信息在这里这里

于 2012-10-15T14:47:40.727 回答