2011-05-25 65 views
4

我在很早的阶段蟒用户。Python-创建表

我有两个数据,从1850年设定的温度超过一个特定的位置至2010年随着温度的一个值,每个月这整个期间。我试图用下面给出的格式创建一个包含这些值的表格。 T是我的数据。

year data JAn FEB MAR APR MAY JUN JUL AUG SEP .......DEC. 
1850 data1 t t t t t t t t t   t. 
    data2 t t t t t t t t t   t. 
'. 
'. 
'. 
2010 data1 t t t t t t t t t   t. 

对不起,我不能张贴表格的图片,我如何需要。我不能张贴照片。我无法指定我需要的表格的形状。 所以我张贴另一个样本表的链接。 its another data set.但我需要在这一年有两行。一个用于我的数据1和一个用于我的数据2.

现在我所拥有的是从1850年到2010年的完整的一系列数据。我想以上述给定的格式将两个数据集重写为一张表。从我已经分割数据1和数据2每年的数据。我知道这是一个通过办公软件很容易完成的工作,但我知道这不是编程的方式。请有人帮我做这件事。

这里是我现在有。

data1 = [t, t, t, t, t, t, t, t, t,..............................t] 
data2 = [t, t, t, t, t, t, t, t, t,..............................t] 

#This data1 and data2 is the list of data for the entire period from 1850-2010 
#I sliced this data as 
n = len(data1) 
data1_yearly = [data1[i:i+12] for i in xrange(0,n,12)] 
data2_yearly = [data2[i:i+12] for i in xrange(0,n,12)] 

现在我有data1和data2切片每年的值。 data1_yearly [0]给我的数据的价值,为1850年进一步索引会给我的所有数据的时间。

从这里

于是开始了我的问题。 如何以上述指定的格式将此数据写入表格中。我对这种语言纯粹是陌生的,所以请不要认为这个请求是愚蠢的,并请善待我。

+1

你需要更具体的了解你的意思是什么“的表。”您是在谈论一个看起来像您的第一个片段的文本文件,还是您的意思是关系数据库中的条目,或者是什么? – jhocking 2011-05-25 19:28:03

+0

我不确定它有多大的帮助,但你应该看看'numpy'。 – Daenyth 2011-05-25 19:28:50

+0

如果我没有正确描述,我很抱歉。打印一个文本文件或者只是给出一个这种形状的列表对我来说可以。我开始讨论numpy和python,并且我尝试了很多错误的东西来将数据添加到所需的行和列中。 – Rajeev 2011-05-25 19:29:03

回答

2

我建议你看看string templates

例子:

>>> from string import Template 
>>> s = Template('$who likes $what') 
>>> s.substitute(who='tim', what='kung pao') 
'tim likes kung pao' 
>>> d = dict(who='tim') 
>>> Template('Give $who $100').substitute(d) 
Traceback (most recent call last): 
[...] 
ValueError: Invalid placeholder in string: line 1, col 10 
>>> Template('$who likes $what').substitute(d) 
Traceback (most recent call last): 
[...] 
KeyError: 'what' 
>>> Template('$who likes $what').safe_substitute(d) 
'tim likes $what' 

如果您创建目标格式的字符串模板,然后将数据放在字典如上所述,在转换应该很容易。

也就是说,如果我正确地解释你的问题,即你要打印好的表格到标准输出...

1

要打印上面的表中的数据,我建议一些字符串格式化一个简单的循环:

print "\t".join(['year', 'data', 'Jan', 'FEB', 'MAR', 'APR', 'MAY', 'JUN', 'JUL', 'AUG', 'SEP', 'OCT', 'NOV', 'DEZ']) 
theYearOffset = 1850 
for theYearCounter in range(len(data1_yearly)): 
    print "%s\t%s\t%s\n\t%s\t%s" % ((theYearOffset + theYearCounter), 
     'data1', "\t".join(["%.2f" % theValue for theValue in data1_yearly[theYearCounter]]), 
     'data2', "\t".join(["%.2f" % theValue for theValue in data2_yearly[theYearCounter]])) 

这不是最美丽的代码,但它可以完成这项工作。这些列由制表符分隔,而浮点数则平分为2位数。

下面是一些愚蠢的测试数据输出:

output

测试数据:

data1 = [1.1233,2,3,4,5,6,7,8,9,10,11,1,2,3,4,5,6,7,8,9,10,11,1,2,3,4,5,6,7,8,9,10,11,1,2,3,4,5,6,7,8,9,10,11] 
data2 = [8,9,10,11,12,13,14,15,1,2,4,8,9,10,11,12,13,14,15,1,2,4,8,9,10,11,12,13,14,15,1,2,4,8,9,10,11,12,13,14,15,1,2,4] 
+0

感谢您的帮助。代码完美工作。谢谢 – Rajeev 2011-05-26 06:08:58

+0

欢迎来到蟒蛇世界。 Python有很多语法suggar(你已经使用了列表理解)。你可以看看http://stackoverflow.com/questions/101268这个语言的一些不错的功能 – spassig 2011-05-26 07:19:45

+0

雅谢谢你的信息。我真的是一个初学者。肯定会赶上。 – Rajeev 2011-05-26 10:00:05