所以我的问题是采用几个长向量(每个长度为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.
此致
答案 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'])
中还有更多内容可供查找