微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将电子表格的列存储在Python字典中

我有一个存储在Excel文件中的表,如下所示:
Species     Garden Hedgerow Parkland Pasture Woodland
Blackbird       47       10      40        2        2
Chaffinch       19        3       5        0        2
Great Tit       50        0      10        7        0
House Sparrow   46       16       8        4        0
Robin            9        3       0        0        2
Song Thrush      4        0       6        0        0

我正在使用xlrd Python库来读取这些数据.我将它读入列表列表(将表的每一行存储为列表)没有问题,使用下面的代码

from xlrd import open_workbook
wb = open_workbook("Sample.xls")
headers = []
sdata = []
for s in wb.sheets():
    print "Sheet:",s.name
    if s.name.capitalize() == "Data":
        for row in range(s.nrows):
            values = []
            for col in range(s.ncols):
                data = s.cell(row,col).value
                if row == 0:
                    headers.append(data)
                else:   
                    values.append(data)
            sdata.append(values)

很明显,header是一个存储列标题的简单列表,sdata包含表数据,存储为列表列表.这是他们的样子:

标题

[u'Species',u'Garden',u'Hedgerow',u'Parkland',u'Pasture',u'Woodland']

SDATA:

[[u'Blackbird',47.0,10.0,40.0,2.0,2.0],[u'Chaffinch',19.0,3.0,5.0,0.0,[u'Great Tit',50.0,7.0,0.0],[u'House Sparrow',46.0,16.0,8.0,4.0,[u'Robin',9.0,[u'Song Thrush',6.0,0.0]]

但我想将这些数据存储到Python字典中,每列作为包含每列所有值的列表的键.例如(仅显示部分数据以节省空间):

dict = {
    'Species': ['Blackbird','Chaffinch','Great Tit'],'Garden': [47,19,50],'Hedgerow': [10,3,0],'Parkland': [40,5,10],'Pasture': [2,7],'Woodland': [2,2,0]
}

所以,我的问题是:我怎样才能做到这一点?我知道我可以按列而不是按行读取数据,如上面的代码片段,但我无法弄清楚如何将列存储在字典中.

提前感谢您提供的任何帮助.

解决方法

一旦你有了列,这很容易:
dict(zip(headers,sdata))

实际上,看起来你的例子中的sdata可能是行数据,即便如此,这仍然相当容易,你也可以用zip转置表格:

dict(zip(headers,zip(*sdata)))

这两个中的一个是你要求的.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐