Skip to main content

How to read data from excel or spreadsheet file with Python

We all are used to managing data using Excel sheets or spreadsheets, sometimes it becomes necessary for us to use the data stored in excel sheet for some computations using python

In this tutorial we will be reading the data in an excel file using python xlrd module.

According to official documentation at pypi xlrd is:
xlrd module is a library to extract data from Excel sheets or spreadsheet files.
Before we start we will have to install this module so that it can be used in our python script. If you have not yet installed this module on your computer then you can do the following:
$ pip install xlrd
You can also install using easy_install or by downloading the package from pypi, all of them have the same effect.

We will start with IDLE so that we can understand each and every command in the interpreter easily.

We will using roc.xls for this tutorial and the spreadsheet(roc.xls) contains the following data:
Roll NumberNameMarksRank
1Pearson864
2John893
3Habib645
4Venkat982
5Suri1001
First import xlrd module:
>>> import xlrd
Now we will open the workbook:
>>> wb = xlrd.open_workbook('roc.xls')
We will see the list of sheets present in the workbook:
>>> wb = xlrd.open_workbook('roc.xls')
>>> sh = wb.sheet_names()
>>> sh
[u'Sheet1']
Next we will open the sheet(or worksheet) in the spreadsheet.
Opening the sheet by name:
>>> sh = wb.sheet_by_name('Sheet1')
Opening the sheet by index:
>>> sh = wb.sheet_by_index(0)
After we have opened the sheet we will have to read the data as this is our main goal. You can do that in many ways:
Read data from a cell:
>>> sh.cell_value(0,2) #sh.cell_value(row,column)
u'Marks'
>>> sh.cell(1,2).value #sh.cell(row,column).value
86.0
Read data from each row:
>>> sh.row_values(2)
[2.0, u'John', 89.0, 3.0]
Read data from a column:
>>> sh.col_values(2)
[u'Marks', 86.0, 89.0, 64.0, 98.0, 100.0]
Finding the number of columns present in the spreadsheet:
>>> sh.ncols
4
Finding the number of rows present in the spreadsheet:
>>> sh.nrows
6
If we want to get the whole data, then we can use for loop to loop through cells or rows or columns. This can be done as follows:
For loop through cells:
>>> for i in range(sh.nrows):
 for j in range(sh.ncols):
  print sh.cell_value(i,j) #Or can be written as sh.cell(i,j.value)

  
Roll Number
Name
Marks
Rank
1.0
Pearson
86.0
4.0
2.0
John
89.0
3.0
3.0
Habib
64.0
5.0
4.0
Venkat
98.0
2.0
5.0
Suri
100.0
1.0
For loop through rows:
>>> for i in range(sh.nrows):
 print sh.row_values(i)

 
[u'Roll Number', u'Name', u'Marks', u'Rank']
[1.0, u'Pearson', 86.0, 4.0]
[2.0, u'John', 89.0, 3.0]
[3.0, u'Habib', 64.0, 5.0]
[4.0, u'Venkat', 98.0, 2.0]
[5.0, u'Suri', 100.0, 1.0]
For loop through columns:
>>> for i in range(sh.ncols):
 print sh.col_values(i)

 
[u'Roll Number', 1.0, 2.0, 3.0, 4.0, 5.0]
[u'Name', u'Pearson', u'John', u'Habib', u'Venkat', u'Suri']
[u'Marks', 86.0, 89.0, 64.0, 98.0, 100.0]
[u'Rank', 4.0, 3.0, 5.0, 2.0, 1.0]
Usually I will be using the for loop through rows. Now putting all together in a script, what we have learnt:
import xlrd

#Open the workbook
wb = xlrd.open_workbook('roc.xlsx')

#Open the sheet by index
sh = wb.sheet_by_index(0)

#Read data with for loop
for i in range(sh.nrows):
    print sh.row_values(i)
The output for the above code will be as follows:
>>> 
[u'Roll Number', u'Name', u'Marks', u'Rank']
[1.0, u'Pearson', 86.0, 4.0]
[2.0, u'John', 89.0, 3.0]
[3.0, u'Habib', 64.0, 5.0]
[4.0, u'Venkat', 98.0, 2.0]
[5.0, u'Suri', 100.0, 1.0]

I would like to end this tutorial here because this is a beginner tutorial and I don't want to confuse you by introducing you to more and more methods and classes. If you want to learn more then see the further tutorials in which I will be using a few more xlrd module functions.

As always I have tried to explain each and every thing in this post in such a way that it is easy for everyone to understand. But if you haven't understood anything or have any doubt then please do comment in the comment box below. You can also contact me if you are want to. I will reply to you in both the ways.

Please do comment on how I can improve this tutorial such that it will be useful even for very beginners.
"Let us all together improve by sharing our knowledge."
Thank you. Have a nice day :)

Popular posts from this blog

Project Euler Problem 62 solution with python

Cubic permutations ¶ The cube, 41063625 (3453), can be permuted to produce two other cubes: 56623104 (3843) and 66430125 (4053). In fact, 41063625 is the smallest cube which has exactly three permutations of its digits which are also cube. Find the smallest cube for which exactly five permutations of its digits are cube.

Project Euler Problem 67 Solution with Python

Maximum path sum II By starting at the top of the triangle below and moving to adjacent numbers on the row below, the maximum total from top to bottom is 23. 3 7 4 2 4 6 8 5 9 3 That is, 3 + 7 + 4 + 9 = 23. Find the maximum total from top to bottom in triangle.txt (right click and 'Save Link/Target As...'), a 15K text file containing a triangle with one-hundred rows.

Add/Embed SVG to Blogger website

In this post I will tell you my method(trick) of adding SVG images in a blogger website or blog. Before starting , the first thin g I am assu m ing is that you are aware of SVG if you are here. If not please see S calable V ec tor G raphics Recently when I tried to embed a SVG image for a post on pygal, I tried uploading the SVG file and blogger Image uploader came up with an error, because of which I had to find some other way.  SVG File upload Error in Blogger  I started sea rc hing Google " Embed SVG in Blogger " . I found blogorrhea , w h ich gave some i nformatio n on add ing SVG directly as a markup , which worked , but I faced another problem using this . Also th is guy has used lot of Javascript which was confusin g for me, being new to using SVG.   So I first t houg ht of learning on h ow to embed SVG in HTML and t his on e worked out. Actually we can embed SVG in HTML i n following ways: Using Object tag Using Iframe tag Using embed...