Insert data range into multi dimensionnal array

Question:

I am trying to get data from an excel file using xlwings (am new to python) and load it into a multi dimensionnal array (or rather, table) that I could then loop through later on row by row.

What I would like to do :

db = []
wdb = xw.Book(r'C:tempxlpythondb.xlsx')
db.append(wdb.sheets[0].range('A2:K2').expand('down'))

So this would load the data into my table ‘db’, and I could later loop through it using :

for i in range(len(db)):
        print(db[i][1])

If I wanted to retrieve the data originally in column B for instance

But instead of this, it loads the data in a single dimension, so if I run the code :

print(range(len(db)))

I will get (0,1) instead of the (0,145) expected if I had 146 rows of data in the excel file

Is there a way to do this, except loading the table line by line ?

Thanks

Asked By: lmb

||

Answers:

Have a look at the documentation here on converting the range to a numpy array or specifying the dimensions.

db = []
wdb = xw.Book(r'C:tempxlpythondb.xlsx')
db.append(wdb.sheets[0].range('A2:K2').options(np.array, expand='down').value)
Answered By: Rawson

After looking at numpy arrays as suggested by Rawson, it seems they have the same behaviour than python lists when appending a whole range, meaning it generates a flat array and does not preserve the rows of the excel range into the array; at least I couldn’t get it to work that way.

So finally I looked into panda DataFrame and it seems to do the exact needed job, you can even import column titles which is a plus.

import pandas as pd
wdb = xw.Book(r'C:tempxlpythondb.xlsx')
db= pd.DataFrame(wdb.sheets[0].range('A2:K2').expand('down').value)
Answered By: lmb
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.