Skip to main content

Python Pandas: How to Export DataFrame to Excel Without Index

When exporting a Pandas DataFrame to an Excel file using the to_excel() method, Pandas includes the DataFrame's index as the first column in the spreadsheet by default. However, in many situations, this index (especially if it's a default 0-based integer index) is not desired in the output Excel file.

This guide explains how to easily export a Pandas DataFrame to an Excel (.xlsx) file without writing the index, using the index=False parameter.

Default Behavior: Index Included in Excel Export

By default, when you use df.to_excel('filename.xlsx'), Pandas writes the DataFrame's index (row labels) as the first unnamed column in the resulting Excel sheet.

import pandas as pd

data = {
'Product ID': ['A101', 'B202', 'C303'],
'Product Name': ['Laptop', 'Mouse', 'Keyboard'],
'Price': [1200, 25, 75]
}
df_default = pd.DataFrame(data)
print("DataFrame with default index:")
print(df_default)

# Exporting with default behavior (index=True)
# df_default.to_excel('output_with_index.xlsx', sheet_name='Sheet1')
# If you open output_with_index.xlsx, you'll see an unnamed column with 0, 1, 2.

This unnamed first column (often showing 0, 1, 2, ...) is the DataFrame's index.

Example DataFrame

We'll use the following DataFrame for our export examples:

import pandas as pd

data_to_export = {
'Order ID': [1001, 1002, 1003, 1004],
'Customer Name': ['Alice Smith', 'Bob Johnson', 'Charlie Brown', 'Diana Prince'],
'Item': ['Laptop', 'Keyboard', 'Mouse', 'Monitor'],
'Quantity': [1, 2, 3, 1],
'Unit Price': [1200, 75, 25, 300]
}
df = pd.DataFrame(data_to_export)

# Example: Set a custom string index (which would also be exported by default)
# df = df.set_index('Order ID')

print("DataFrame to be exported:")
print(df)

The DataFrame.to_excel(excel_writer, sheet_name='Sheet1', index=True, ...) method has an index parameter. Setting this parameter to False prevents Pandas from writing the DataFrame's index to the Excel file.

import pandas as pd

df_to_export = pd.DataFrame({
'Order ID': [1001, 1002, 1003, 1004],
'Customer Name': ['Alice Smith', 'Bob Johnson', 'Charlie Brown', 'Diana Prince'],
'Item': ['Laptop', 'Keyboard', 'Mouse', 'Monitor'],
'Quantity': [1, 2, 3, 1],
'Unit Price': [1200, 75, 25, 300]
})

output_filename = 'orders_without_index.xlsx'
sheet_name = 'OrderData'

# ✅ Export to Excel without writing the index
df_to_export.to_excel(output_filename, sheet_name=sheet_name, index=False)

print(f"DataFrame exported to '{output_filename}' without the index.")
# Open 'orders_without_index.xlsx' to verify.
# The first column in Excel will be 'Order ID' (or your first data column),
# not the 0, 1, 2... index.
  • output_filename: The name of the Excel file to create (e.g., your_file.xlsx).
  • sheet_name: The name of the sheet within the Excel file where the data will be written.
  • index=False: This is the key parameter that omits the DataFrame index from the output.

Using pd.ExcelWriter to Export Without Index

If you need to write multiple DataFrames to different sheets in the same Excel file, or require more control over the Excel writing process, you'll use pd.ExcelWriter. The index=False parameter is still used within the to_excel call when using an ExcelWriter object.

Using ExcelWriter as a context manager (with a with statement) ensures the writer is properly closed and the file is saved correctly.

import pandas as pd

df1 = pd.DataFrame({
'Order ID': [1001, 1002], 'Item': ['Laptop', 'Keyboard'], 'Unit Price': [1200, 75]
})
df2 = pd.DataFrame({
'Product Code': ['M01', 'M02'], 'Description': ['Gaming Mouse', 'Mechanical Keyboard']
})

output_filename_writer = 'multiple_sheets_no_index.xlsx'

# ✅ Use pd.ExcelWriter as a context manager
with pd.ExcelWriter(output_filename_writer, engine='openpyxl') as writer:
df1.to_excel(writer, sheet_name='Orders', index=False) # index=False for this sheet
df2.to_excel(writer, sheet_name='Products', index=False) # index=False for this sheet

print(f"Multiple DataFrames exported to '{output_filename_writer}' without indices using ExcelWriter.")
# Open the file to see 'Orders' and 'Products' sheets, both without the Pandas index.

Manual save() or close()

If not using a context manager, you must explicitly call writer.save() or writer.close() to finalize the Excel file.

import pandas as pd

df1 = pd.DataFrame({
'Order ID': [1001, 1002], 'Item': ['Laptop', 'Keyboard'], 'Unit Price': [1200, 75]
})

output_filename_manual = 'manual_save_no_index.xlsx'
writer_manual = pd.ExcelWriter(output_filename_manual, engine='openpyxl')

df1.to_excel(writer_manual, sheet_name='Sheet1_Manual', index=False)

# ✅ Must call save() or close()
writer_manual.save() # or writer_manual.close()
# In modern pandas, .close() is an alias for .save() and then closes.

print(f"DataFrame exported to '{output_filename_manual}' using manual writer save.")

Forgetting to call save() or close() when not using a with statement will result in an empty or corrupted Excel file.

Prerequisites: Installing openpyxl (or other engines)

Pandas uses external libraries (engines) to write Excel files.

  • For .xlsx files (modern Excel format): openpyxl is the recommended engine.
  • For older .xls files: xlwt was traditionally used, but openpyxl can also handle some .xls interactions or you might explore other libraries if strictly .xls output is needed.

If you don't have openpyxl installed, you'll get an error. Install it using pip:

pip install openpyxl
# or
pip3 install openpyxl

You might also need to specify the engine in to_excel or ExcelWriter if Pandas cannot infer it or if you have multiple engines installed: df.to_excel('file.xlsx', index=False, engine='openpyxl').

Conclusion

Exporting a Pandas DataFrame to Excel without including its index is a simple yet common requirement.

  • The most straightforward method is to use the index=False parameter directly in the DataFrame.to_excel() call:
    df.to_excel('your_excel_file.xlsx', sheet_name='MyData', index=False)
  • This index=False parameter also applies when using df.to_excel() in conjunction with a pd.ExcelWriter object for writing multiple sheets.

By setting index=False, you ensure that the output Excel file contains only your data columns, providing a cleaner and often more user-friendly spreadsheet. Remember to have the necessary engine (like openpyxl) installed.