14

According to pandas doc for 0.21+, pandas.read_excel has a parameter sheet_name that allows specifying which sheet is read. But when I am trying to read the second sheet from an excel file, no matter how I set the parameter (sheet_name = 1, sheet_name = 'Sheet2'), the dataframe always shows the first sheet, and passing a list of indices (sheet_name = [0, 1]) does not return a dictionary of dataframes but still the first sheet. What might be the problem here?

smci
  • 29,564
  • 18
  • 109
  • 144
user5409172
  • 393
  • 1
  • 4
  • 10

4 Answers4

23

It looks like you're using the old version of Python. So try to change your code

df = pd.read_excel(file_with_data, sheetname=sheet_with_data)

It should work properly.

Sergey Solod
  • 635
  • 6
  • 12
  • 11
    check your version of pandas `pd.__version__` If .21 or newer, use `sheet_name` keyword parameter. If older version, use `sheetname` [pandas.read_excel](https://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_excel.html) – datalifenyc Dec 30 '18 at 17:49
7

You can try to use pd.ExcelFile:

xls = pd.ExcelFile('path_to_file.xls')
df1 = pd.read_excel(xls, 'Sheet1')
df2 = pd.read_excel(xls, 'Sheet2')
whiplassh
  • 144
  • 1
  • 7
1

This works:

df = pd.read_excel(open(file_path_name), 'rb'), sheetname = sheet_name)

file_path_name = your file
sheet_name = your sheet name

This does not for me:

df = pd.read_excel(open(file_path_name), 'rb'), sheet_name = sheet_name)

Gave me only the first sheet, no matter how I defined sheet_name.

--> it is an known error: https://github.com/pandas-dev/pandas/issues/17107

Alex Riabov
  • 7,639
  • 5
  • 41
  • 47
Torolito
  • 13
  • 5
0

Try at Terminal, type the following first, then re-run your program: pip install xlrd

Lee Li Fong
  • 254
  • 1
  • 6