Python-创建表格

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.

抱歉,我无法发布我所需的表格图片。我没有发布图片的权限,也无法指定所需的表格形状。因此,我在这里发布另一个示例表格的链接(另一个数据集),但我需要针对每年有两行数据:一行是我的data1,另一行是我的data2。
现在,我已经拥有完整的数据系列,时间跨度从1850年到2010年。我想将上述给定格式的两个数据集重写为表格。通过办公软件可以轻松完成此任务,但我知道这不是编程的方式。请有人帮助我完成它。
以下是我目前拥有的内容。
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
我不确定它有多大帮助,但你应该看一下 numpy - Daenyth
如果我没有正确描述清楚,我很抱歉。对我来说,打印文本文件或只是以那种形式给出列表都可以。我是numpy和python的初学者,我尝试了很多错误的方法来添加所需的行和列中的数据。 - Rajeev
请更具体一些:您的问题是要将给定输入格式的数据解析成Python列表,还是要将Python列表呈现为输出格式,还是两者都需要?另外,如果你试图转换特定的文件,如果您提供该文件来源的链接,您将得到更好的答案。 - Sasha
Saha,现在我有一个从1850年1月到2010年12月的单一数据系列。 我想将该数据重写为行和列,并且在行中,我应该拥有一年的数据,在列中,我应该拥有该月的数据。我将编辑我的问题并添加我现在拥有的数据文件。 - Rajeev
澄清一下:(A)您不需要帮助读取文件,只需要生成输出。(B)当程序运行时,您有两个名为data1和data2的Python列表。每个列表包含161年的月度数据,即1850-2010年 - 因此两个列表的长度均为1,932。(C)您想要生成类似于第一个表格的文本输出。因此,您想要161对行(总共322行,交替使用data1和data2),每行包含以下字段:年份,数据系列的名称(data1或data2)以及每个月份的一个数字(从一月到十二月)。是这样吗? - Sasha
2个回答

2
我建议您查看 字符串模板
示例:
>>> 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]

欢迎来到Python世界。Python提供了很多语法糖(您已经使用了列表推导式)。您可以访问https://dev59.com/oHVD5IYBdhLWcg3wE3No了解这种语言的一些不错的特性。 - spassig
谢谢提供信息。我确实是个初学者,但一定会跟上的。 - Rajeev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接