2011-05-25 83 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