使用xlrd和python时遇到列表和矩阵的问题

时间:2014-05-15 09:35:48

标签: python excel xlrd

所以我的问题是采用几个长向量(每个长度为15000行)和外观:

Origin     Destination     Distance

和列中的相应值。但是,我希望使用Python和xlrd包将这些转换为具有

的距离矩阵
          Destination1     Destination2
Origin1   Distance11       Distance12
Origin2   Distance21       Distance22

等等。

到目前为止我尝试的是:

matrix ={}, i=0, list3 = [], list1 = []
for row in range(orksheet.nrows):
matrix[i] = {}
cell = worksheet.cell(row,2)
distance = cell.value
if float(distance) < 25000:
    list1 = [int(worksheet.cell_value(row,0))]
    list3 = list3.append(list1)
    list2 = [int(worksheet.cell_value(row,1))]
    for l in list1:
        for j in list2:
                matrix[l, j]=math.ceil(worksheet.cell_value(row,2))             
i+=1

这有点奏效。我用的时候     打印(L,J矩阵[L,j]的

在l和j的循环中我得到了我得到的所需值。但是,使用print(矩阵)给出(一般,即类似的输出,但用相应的值代替)输出:

(Origin, Destination): Distance and sometimes: distance: {}, distance: {}, 

等等。

我认为问题在于矩阵。我无法理解为什么它的打印效果与我认为与列表有关的内容相似? list1和list2有len 1,这对我来说很奇怪。我试图使用list3追加list1,但它也得到了len 1.

此致

1 个答案:

答案 0 :(得分:1)

我无法为数据操作任务推荐pandas

例如,您在pandas中搜索的操作称为pivot

In [11]: df = pd.DataFrame({'origin': list('aabbccdd'), 'destination': ['d1', 'd2'] * 4, 'distance': np.arange(8)})

In [12]: df
Out[12]: 
  destination  distance origin
0          d1         0      a
1          d2         1      a
2          d1         2      b
3          d2         3      b
4          d1         4      c
5          d2         5      c
6          d1         6      d
7          d2         7      d

In [13]: df.pivot('origin', 'destination', 'distance')
Out[13]: 
destination  d1  d2
origin             
a             0   1
b             2   3
c             4   5
d             6   7

要阅读实际的excel文件,其中pandas.read_excel AFAIR在引擎盖下使用了xlrd:

df = read_excel('path_to_file.xls', 'Sheet1', index_col=None, na_values=['NA'])

documentation

中还有更多内容可供查找