Python:将xlrd表转换为numpy矩阵(ndarray)

时间:2015-01-11 23:01:52

标签: python numpy xlrd

将成功加载的xlrd excel表格转换为numpy矩阵(表示该表格)的转换语法是什么?

现在我正试图获取电子表格的每一行并将其添加到numpy矩阵中。我无法弄清楚将Sheet.row转换为numpy.ndarray的语法。这是我到目前为止所尝试的内容:

import xlrd
workbook = xlrd.open_workbook('input.xlsx')
worksheet = workbook.sheet_by_name('Sheet1')
num_rows = worksheet.nrows - 1
num_cells = worksheet.ncols - 1
inputData = numpy.empty([worksheet.nrows - 1, worksheet.ncols])
curr_row = -1
while curr_row < num_rows: # for each row
    curr_row += 1
    row = worksheet.row(curr_row)
    if curr_row > 0: # don't want the first row because those are labels
        inputData[curr_row - 1] = numpy.array(row)

我已经在最后一行尝试了各种各样的事情来尝试将行转换为numpy接受并添加到inputData矩阵的东西。什么是正确的转换语法?

2 个答案:

答案 0 :(得分:2)

我想知道您是否了解具有xlsx加载功能的Pandas库:

import pandas as pd
df = pd.read_excel('input.xlsx')

您可以使用sheetname参数控制要读取的工作表,并且可以从values属性中的Pandas DataFrame获取Numpy数组。

答案 1 :(得分:0)

您正在尝试将对象row(一个xlrd.sheet.Cell元素列表)直接转换为numpy数组。这不会按你想要的方式工作。你必须做很长的事情,然后遍历每一列:

while curr_row < num_rows: # for each row
    curr_row += 1
    row = worksheet.row(curr_row)
    if curr_row > 0: # don't want the first row because those are labels
        for col_ind, el in enumerate(row):
            inputData[curr_row - 1, col_ind] = el.value

exist a function for this中的pandas似乎elsewhere on SO,正如{{3}}所示。并且pandas数据帧继承自numpy数组,因此也可以转换为它们。可能最好不要重新发明轮子......