2015-01-11 3 views
0

Что такое синтаксис преобразования для преобразования успешно загруженного xlrd листа excel в матрицу numpy (который представляет этот лист)?Python: преобразовать xlrd лист в матрицу numpy (ndarray)

Сейчас я пытаюсь взять каждую строку таблицы и добавить ее в матрицу 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. Каков правильный синтаксис преобразования?

ответ

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. И dataframes pandas наследуются от массивов numpy, поэтому их также можно преобразовать. Наверное, лучше не изобретать колесо ...

2

Я интересно, если вы знаете о библиотеке панды, которая показывает XLSX загрузки:

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

Вы можете контролировать, какие лист для чтения с sheetname аргументом, и вы можете получите массив Numpy из Pandas DataFrame в атрибуте values.