In this tutorial, you’ll learn how to save your Pandas DataFrame or DataFrames to Excel files. Being able to save data to this ubiquitous data format is an important skill in many organizations. In this tutorial, you’ll learn how to save a simple DataFrame to Excel, but also how to customize your options to create the report you want!
By the end of this tutorial, you’ll have learned:
- How to save a Pandas DataFrame to Excel
- How to customize the sheet name of your DataFrame in Excel
- How to customize the index and column names when writing to Excel
- How to write multiple DataFrames to Excel in Pandas
- Whether to merge cells or freeze panes when writing to Excel in Pandas
- How to format missing values and infinity values when writing Pandas to Excel
Let’s get started!
The Quick Answer: Use Pandas to_excel
To write a Pandas DataFrame to an Excel file, you can apply the .to_excel()
method to the DataFrame, as shown below:
# Saving a Pandas DataFrame to an Excel File
# Without a Sheet Name
df.to_excel(file_name)
# With a Sheet Name
df.to_excel(file_name, sheet_name='My Sheet')
# Without an Index
df.to_excel(file_name, index=False)
Understanding the Pandas to_excel Function
Before diving into any specifics, let’s take a look at the different parameters that the method offers. The method provides a ton of different options, allowing you to customize the output of your DataFrame in many different ways. Let’s take a look:
# The many parameters of the .to_excel() function
df.to_excel(excel_writer, sheet_name='Sheet1', na_rep='', float_format=None, columns=None, header=True, index=True, index_label=None, startrow=0, startcol=0, engine=None, merge_cells=True, encoding=None, inf_rep='inf', verbose=True, freeze_panes=None, storage_options=None)
Let’s break down what each of these parameters does:
Parameter | Description | Available Options |
---|---|---|
excel_writer= |
The path of the ExcelWriter to use | path-like, file-like, or ExcelWriter object |
sheet_name= |
The name of the sheet to use | String representing name, default ‘Sheet1’ |
na_rep= |
How to represent missing data | String, default '' |
float_format= |
Allows you to pass in a format string to format floating point values | String |
columns= |
The columns to use when writing to the file | List of strings. If blank, all will be written |
header= |
Accepts either a boolean or a list of values. If a boolean, will either include the header or not. If a list of values is provided, aliases will be used for the column names. | Boolean or list of values |
index= |
Whether to include an index column or not. | Boolean |
index_label= |
Column labels to use for the index. | String or list of strings. |
startrow= |
The upper left cell to start the DataFrame on. | Integer, default 0 |
startcol= |
The upper left column to start the DataFrame on | Integer, default 0 |
engine= |
The engine to use to write. | openpyxl or xlsxwriter |
merge_cells= |
Whether to write multi-index cells or hierarchical rows as merged cells | Boolean, default True |
encoding= |
The encoding of the resulting file. | String |
inf_rep= |
How to represent infinity values (as Excel doesn’t have a representation) | String, default 'inf' |
verbose= |
Whether to display more information in the error logs. | Boolean, default True |
freeze_panes= |
Allows you to pass in a tuple of the row, column to start freezing panes on | Tuple of integers with length 2 |
storage_options= |
Extra options that allow you to save to a particular storage connection | Dictionary |
.to_excel()
methodHow to Save a Pandas DataFrame to Excel
The easiest way to save a Pandas DataFrame to an Excel file is by passing a path to the .to_excel()
method. This will save the DataFrame to an Excel file at that path, overwriting an Excel file if it exists already.
Let’s take a look at how this works:
# Saving a Pandas DataFrame to an Excel File
import pandas as pd
df = pd.DataFrame.from_dict(
{'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]}
)
df.to_excel('filename.xlsx')
Running the code as shown above will save the file with all other default parameters. This returns the following image:
You can specify a sheetname by using the sheet_name=
parameter. By default, Pandas will use 'sheet1'
.
# Specifying a Sheet Name When Saving to Excel
import pandas as pd
df = pd.DataFrame.from_dict(
{'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]}
)
df.to_excel('filename.xlsx', sheet_name='Your Sheet')
This returns the following workbook:
In the following section, you’ll learn how to customize whether to include an index column or not.
How to Include an Index when Saving a Pandas DataFrame to Excel
By default, Pandas will include the index when saving a Pandas Dataframe to an Excel file. This can be helpful when the index is a meaningful index (such as a date and time). However, in many cases, the index will simply represent the values from 0 through to the end of the records.
If you don’t want to include the index in your Excel file, you can use the index=
parameter, as shown below:
# How to exclude the index when saving a DataFrame to Excel
import pandas as pd
df = pd.DataFrame.from_dict(
{'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]}
)
df.to_excel('filename.xlsx', index=False)
This returns the following Excel file:
In the following section, you’ll learn how to rename an index when saving a Pandas DataFrame to an Excel file.
How to Rename an Index when Saving a Pandas DataFrame to Excel
By default, Pandas will not named the index of your DataFrame. This, however, can be confusing and can lead to poorer results when trying to manipulate the data in Excel, either by filtering or by pivoting the data. Because of this, it can be helpful to provide a name or names for your indices.
Pandas makes this easy by using the index_label=
parameter. This parameter accepts either a single string (for a single index) or a list of strings (for a multi-index). Check out below how you can use this parameter:
# Providing a name for your Pandas index
import pandas as pd
df = pd.DataFrame.from_dict(
{'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]}
)
df.to_excel('filename.xlsx', index_label='Your Index')
This returns the following sheet:
How to Save Multiple DataFrames to Different Sheets in Excel
One of the tasks you may encounter quite frequently is the need to save multi Pandas DataFrames to the same Excel file, but in different sheets. This is where Pandas makes it a less intuitive. If you were to simply write the following code, the second command would overwrite the first command:
# The wrong way to save multiple DataFrames to the same workbook
import pandas as pd
df = pd.DataFrame.from_dict(
{'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]}
)
df.to_excel('filename.xlsx', sheet_name='Sheet1')
df.to_excel('filename.xlsx', sheet_name='Sheet2')
Instead, we need to use a Pandas Excel Writer to manage opening and saving our workbook. This can be done easily by using a context manager, as shown below:
# The Correct Way to Save Multiple DataFrames to the Same Workbook
import pandas as pd
df = pd.DataFrame.from_dict(
{'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]}
)
with pd.ExcelWriter('filename.xlsx') as writer:
df.to_excel(writer, sheet_name='Sheet1')
df.to_excel(writer, sheet_name='Sheet2')
This will create multiple sheets in the same workbook. The sheets will be created in the same order as you specify them in the command above.
This returns the following workbook:
How to Save Only Some Columns when Exporting Pandas DataFrames to Excel
When saving a Pandas DataFrame to an Excel file, you may not always want to save every single column. In many cases, the Excel file will be used for reporting and it may be redundant to save every column. Because of this, you can use the columns=
parameter to accomplish this.
Let’s see how we can save only a number of columns from our dataset:
# Saving Only a Subset of Columns to Excel
import pandas as pd
df = pd.DataFrame.from_dict(
{'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]}
)
df.to_excel('filename.xlsx', columns=['A', 'B'])
This returns the following Excel file:
How to Rename Columns when Exporting Pandas DataFrames to Excel
Continuing our discussion about how to handle Pandas DataFrame columns when exporting to Excel, we can also rename our columns in the saved Excel file. The benefit of this is that we can work with aliases in Pandas, which may be easier to write, but then output presentation-ready column names when saving to Excel.
We can accomplish this using the header=
parameter. The parameter accepts either a boolean value of a list of values. If a boolean value is passed, you can decide whether to include or a header or not. When a list of strings is provided, then you can modify the column names in the resulting Excel file, as shown below:
# Modifying Column Names when Exporting a Pandas DataFrame to Excel
import pandas as pd
df = pd.DataFrame.from_dict(
{'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]}
)
df.to_excel('filename.xlsx', header=['New_A', 'New_B', 'New_C'])
This returns the following Excel sheet:
How to Specify Starting Positions when Exporting a Pandas DataFrame to Excel
One of the interesting features that Pandas provides is the ability to modify the starting position of where your DataFrame will be saved on the Excel sheet. This can be helpful if you know you’ll be including different rows above your data or a logo of your company.
Let’s see how we can use the startrow=
and startcol=
parameters to modify this:
# Changing the Start Row and Column When Saving a DataFrame to an Excel File
import pandas as pd
df = pd.DataFrame.from_dict(
{'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]}
)
df.to_excel('filename.xlsx', startcol=3, startrow=2)
This returns the following worksheet:
How to Represent Missing and Infinity Values When Saving Pandas DataFrame to Excel
In this section, you’ll learn how to represent missing data and infinity values when saving a Pandas DataFrame to Excel. Because Excel doesn’t have a way to represent infinity, Pandas will default to the string 'inf'
to represent any values of infinity.
In order to modify these behaviors, we can use the na_rep=
and inf_rep=
parameters to modify the missing and infinity values respectively. Let’s see how we can do this by adding some of these values to our DataFrame:
# Customizing Output of Missing and Infinity Values When Saving to Excel
import pandas as pd
import numpy as np
df = pd.DataFrame.from_dict(
{'A': [1, np.NaN, 3], 'B': [4, 5, np.inf], 'C': [7, 8, 9]}
)
df.to_excel('filename.xlsx', na_rep='NA', inf_rep='INFINITY')
This returns the following worksheet:
How to Merge Cells when Writing Multi-Index DataFrames to Excel
In this section, you’ll learn how to modify the behavior of multi-index DataFrames when saved to Excel. By default Pandas will set the merge_cells=
parameter to True
, meaning that the cells will be merged. Let’s see what happens when we set this behavior to False
, indicating that the cells should not be merged:
# Modifying Merge Cell Behavior for Multi-Index DataFrames
import pandas as pd
import numpy as np
from random import choice
df = pd.DataFrame.from_dict({
'A': np.random.randint(0, 10, size=50),
'B': [choice(['a', 'b', 'c']) for i in range(50)],
'C': np.random.randint(0, 3, size=50)})
pivot = df.pivot_table(index=['B', 'C'], values='A')
pivot.to_excel('filename.xlsx', merge_cells=False)
This returns the Excel worksheet below:
How to Freeze Panes when Saving a Pandas DataFrame to Excel
In this final section, you’ll learn how to freeze panes in your resulting Excel worksheet. This allows you to specify the row and column at which you want Excel to freeze the panes. This can be done using the freeze_panes=
parameter. The parameter accepts a tuple of integers (of length 2). The tuple represents the bottommost row and the rightmost column that is to be frozen.
Let’s see how we can use the freeze_panes=
parameter to freeze our panes in Excel:
# Freezing Panes in an Excel Workbook Using Pandas
import pandas as pd
import numpy as np
df = pd.DataFrame.from_dict(
{'A': [1, np.NaN, 3], 'B': [4, 5, np.inf], 'C': [7, 8, 9]}
)
df.to_excel('filename.xlsx', freeze_panes=(3,4))
This returns the following workbook:
Conclusion
In this tutorial, you learned how to save a Pandas DataFrame to an Excel file using the to_excel method. You first explored all of the different parameters that the function had to offer at a high level. Following that, you learned how to use these parameters to gain control over how the resulting Excel file should be saved. For example, you learned how to specify sheet names, index names, and whether to include the index or not. Then you learned how to include only some columns in the resulting file and how to rename the columns of your DataFrame. You also learned how to modify the starting position of the data and how to freeze panes.
Additional Resources
To learn more about related topics, check out the tutorials below:
- How to Use Pandas to Read Excel Files in Python
- Pandas Dataframe to CSV File – Export Using .to_csv()
- Introduction to Pandas for Data Science
- Official Documentation: Pandas to_excel
Improve Article
Save Article
Like Article
Improve Article
Save Article
Like Article
Let us see how to export a Pandas DataFrame to an Excel file.
Algorithm:
- Create the DataFrame.
- Determine the name of the Excel file.
- Call to_excel() function with the file name to export the DataFrame.
Example 1:
Python3
import
pandas as pd
marks_data
=
pd.DataFrame({
'ID'
: {
0
:
23
,
1
:
43
,
2
:
12
,
3
:
13
,
4
:
67
,
5
:
89
,
6
:
90
,
7
:
56
,
8
:
34
},
'Name'
: {
0
:
'Ram'
,
1
:
'Deep'
,
2
:
'Yash'
,
3
:
'Aman'
,
4
:
'Arjun'
,
5
:
'Aditya'
,
6
:
'Divya'
,
7
:
'Chalsea'
,
8
:
'Akash'
},
'Marks'
: {
0
:
89
,
1
:
97
,
2
:
45
,
3
:
78
,
4
:
56
,
5
:
76
,
6
:
100
,
7
:
87
,
8
:
81
},
'Grade'
: {
0
:
'B'
,
1
:
'A'
,
2
:
'F'
,
3
:
'C'
,
4
:
'E'
,
5
:
'C'
,
6
:
'A'
,
7
:
'B'
,
8
:
'B'
}})
file_name
=
'MarksData.xlsx'
marks_data.to_excel(file_name)
print
(
'DataFrame is written to Excel File successfully.'
)
Output:
DataFrame is written to Excel File successfully.
The Excel file is:
Example 2: We can also first use the ExcelWriter() method to save it.
Python3
import
pandas as pd
cars_data
=
pd.DataFrame({
'Cars'
: [
'BMW'
,
'Audi'
,
'Bugatti'
,
'Porsche'
,
'Volkswagen'
],
'MaxSpeed'
: [
220
,
230
,
240
,
210
,
190
],
'Color'
: [
'Black'
,
'Red'
,
'Blue'
,
'Violet'
,
'White'
]})
datatoexcel
=
pd.ExcelWriter(
'CarsData1.xlsx'
)
cars_data.to_excel(datatoexcel)
datatoexcel.save()
print
(
'DataFrame is written to Excel File successfully.'
)
Output:
DataFrame is written to Excel File successfully.
Like Article
Save Article
17 авг. 2022 г.
читать 2 мин
Часто вас может заинтересовать экспорт фрейма данных pandas в Excel. К счастью, это легко сделать с помощью функции pandas to_excel() .
Чтобы использовать эту функцию, вам нужно сначала установить openpyxl , чтобы вы могли записывать файлы в Excel:
pip install openpyxl
В этом руководстве будет объяснено несколько примеров использования этой функции со следующим фреймом данных:
import pandas as pd
#create DataFrame
df = pd.DataFrame({'points': [25, 12, 15, 14, 19],
'assists': [5, 7, 7, 9, 12],
'rebounds': [11, 8, 10, 6, 6]})
#view DataFrame
df
points assists rebounds
0 25 5 11
1 12 7 8
2 15 7 10
3 14 9 6
4 19 12 6
Пример 1: базовый экспорт
В следующем коде показано, как экспортировать DataFrame по определенному пути к файлу и сохранить его как mydata.xlsx :
df.to_excel (r'C:UsersZachDesktopmydata.xlsx')
Вот как выглядит фактический файл Excel:
Пример 2: Экспорт без индекса
В следующем коде показано, как экспортировать DataFrame в определенный путь к файлу и удалить столбец индекса:
df.to_excel (r'C:UsersZachDesktopmydata.xlsx', index= False )
Вот как выглядит фактический файл Excel:
Пример 3: Экспорт без индекса и заголовка
В следующем коде показано, как экспортировать DataFrame в определенный путь к файлу и удалить столбец индекса и строку заголовка:
df.to_excel (r'C:UsersZachDesktopmydata.xlsx', index= False, header= False )
Вот как выглядит фактический файл Excel:
Пример 4: Экспорт и имя листа
В следующем коде показано, как экспортировать DataFrame в определенный путь к файлу и назвать рабочий лист Excel:
df.to_excel (r'C:UsersZachDesktopmydata.xlsx', sheet_name='this_data')
Вот как выглядит фактический файл Excel:
Полную документацию по функции to_excel() можно найти здесь .
I am trying to load data from the web source and save it as a Excel file but not sure how to do it. What should I do?
import requests
import pandas as pd
import xmltodict
url = "https://www.kstan.ua/sitemap.xml"
res = requests.get(url)
raw = xmltodict.parse(res.text)
data = [[r["loc"], r["lastmod"]] for r in raw["urlset"]["url"]]
print("Number of sitemaps:", len(data))
df = pd.DataFrame(data, columns=["links", "lastmod"])
lv10
1,4397 gold badges25 silver badges46 bronze badges
asked Mar 14, 2019 at 19:08
1
df.to_csv("output.csv", index=False)
OR
df.to_excel("output.xlsx")
answered Mar 14, 2019 at 19:11
mujjigamujjiga
15.9k2 gold badges30 silver badges47 bronze badges
0
You can write the dataframe to excel using the pandas ExcelWriter, such as this:
import pandas as pd
with pd.ExcelWriter('path_to_file.xlsx') as writer:
dataframe.to_excel(writer)
CodyF
4,8773 gold badges25 silver badges38 bronze badges
answered Mar 14, 2019 at 19:20
razimbresrazimbres
4,5185 gold badges23 silver badges49 bronze badges
If you want to create multiple sheets in the same file
with pd.ExcelWriter('csv_s/results.xlsx') as writer:
same_res.to_excel(writer, sheet_name='same')
diff_res.to_excel(writer, sheet_name='sheet2')
answered Nov 29, 2022 at 17:01
Excel files can be a great way of saving your tabular data particularly when you want to display it (and even perform some formatting to it) in a nice GUI like Microsoft Excel. In this tutorial, we’ll look at how to save a pandas dataframe to an excel .xlsx
file.
Note: The terms “excel file” and “excel workbook” are used interchangeably in this tutorial.
The to_excel()
function
The pandas DataFrame to_excel()
function is used to save a pandas dataframe to an excel file. It’s like the to_csv()
function but instead of a CSV, it writes the dataframe to a .xlsx
file. The following is its syntax:
df.to_excel("pathfile_name.xlsx")
Here, df
is a pandas dataframe and is written to the excel file file_name.xlsx
present at the location path
. By default, the dataframe is written to Sheet1
but you can also give custom sheet names. You can also write to multiple sheets in the same excel workbook as well (See the examples below).
Note that once the excel workbook is saved, you cannot write further data without rewriting the whole workbook.
Examples
First, we’ll create a sample dataframe that we’ll be using throughout this tutorial.
import pandas as pd data = { 'Name': ['Microsoft Corporation', 'Google, LLC', 'Tesla, Inc.', 'Apple Inc.', 'Netflix, Inc.'], 'Symbol': ['MSFT', 'GOOG', 'TSLA', 'AAPL', 'NFLX'], 'Shares': [100, 50, 150, 200, 80] } # create dataframe from data df = pd.DataFrame(data) # display the dataframe df
Now, let’s look at examples of some of the different use-cases where the to_excel()
function might be useful.
1. Save dataframe to an excel file with default parameters
df.to_excel("portfolio.xlsx")
If you just pass the file name to the to_excel()
function and use the default values for all the other parameters, the resulting Excel file gets saved in your current working directory with the given file name. Here’s a snapshot of the file when opened in Excel.
You can see that by default, the dataframe is saved to the sheet Sheet1
. Also, note that the index of the dataframe is saved as a separate column. Pass index=False
if you don’t want the index as a separate column in the excel file.
# to not include index as a column df.to_excel("portfolio.xlsx", index=False)
Here’s how the saved excel file looks now.
2. Save dataframe to an excel file with custom sheet name
You can specify the name of the worksheet using the sheet_name
parameter.
# with custom sheet name df.to_excel("portfolio.xlsx", sheet_name="stocks")
You can see in the above snapshot that the resulting excel file has stocks
as its sheet name.
3. Save to multiple sheets in the same workbook
You can also save dataframes to multiple worksheets within the same workbook using the to_excel()
function. For this, you need to specify an ExcelWriter
object which is a pandas object used to write to excel files. See the example below:
# write to multiple sheets df2 = df.copy() with pd.ExcelWriter("portfolio.xlsx") as writer: df.to_excel(writer, sheet_name="stocks1") df2.to_excel(writer, sheet_name="stocks2")
Here’s how the saved excel file looks.
In the above example, an ExcelWriter
object is used to write the dataframes df
and df2
to the worksheets stocks1
and stocks2
respectively.
Note that creating an ExcelWriter
object with a file name that already exists will result in the contents of the existing file being erased.
For more on the pandas dataframe to_excel()
function, refer to its official documentation.
You might also be interested in –
- Write a Pandas DataFrame to a JSON File
- Copy Pandas DataFrame to the Clipboard
- Save Pandas DataFrame to a CSV file
With this, we come to the end of this tutorial. The code examples and results presented in this tutorial have been implemented in a Jupyter Notebook with a python (version 3.8.3) kernel having pandas version 1.0.5
Subscribe to our newsletter for more informative guides and tutorials.
We do not spam and you can opt out any time.
-
Piyush is a data professional passionate about using data to understand things better and make informed decisions. He has experience working as a Data Scientist in the consulting domain and holds an engineering degree from IIT Roorkee. His hobbies include watching cricket, reading, and working on side projects.
View all posts
Exporting the data to an Excel file is usually the most preferred and handy way to read and interpret a given set of data by any user. It is possible to export your web scraping or other collected data using python code to export to an Excel file, and that too in very simple steps, by making use of the Pandas library.
Follow the below step-by-step tutorial to learn to write a Pandas DataFrame to an Excel File.
Step 1: Install pandas and openpyxl
As you require to export pandas data frame, it is evident that you must be having the pandas package already installed. If not, run the following pip command to install the Pandas python package on your computer.
Now, to work with Excel file functions in Python, you need to install the openpyxl module using the below pip command.
You can write the DataFrame to Excel File without mentioning any sheet name. The step by step process is given below:
Step 2: Make a DataFrame
- Import Pandas package in your python code/script file.
- Create a dataframe of the data you wish to export and initialize the DataFrame with values for rows and columns.
Python Code:
#import pandas package import pandas as pd # creating pandas dataframe df_cars = pd.DataFrame({'Company': ['BMW', 'Mercedes', 'Range Rover', 'Audi'], 'Model': ['X7', 'GLS', 'Velar', 'Q7'], 'Power(BHP)': [394.26, 549.81, 201.15, 241.4], 'Engine': ['3.0 L 6-cylinder', '4.0 L V8', '2.0 L 4-cylinder', '4.0 L V-8']})
Step 3: Create a Writer Object and Export to Excel File
- Create an Excel Writer Object using the: ExcelWriter() method of pandas package
- Input the name of the output excel file, to which you would like to write our DataFrame with extension. (In our example, we have named our output excel file as ‘converted-to-excel.xlsx’)
# creating excel writer object writer = pd.ExcelWriter('converted-to-excel.xlsx')
- Call to_excel() function on the DataFrame with the Excel Writer passed as an argument to export your data to the Excel file with the already given name and extension.
- Save the writer object to save the Excel file
# write dataframe to excel df_cars.to_excel(writer) # save the excel writer.save() print("DataFrame is exported successfully to 'converted-to-excel.xlsx' Excel File.")
Alternate – Direct Approach
A direct approach to this is by exporting data frame directly to the Excel file, without making use of the ExcelWriter object as shown in the below code sample:
import pandas as pd # creating pandas dataframe from dictionary of data df_cars = pd.DataFrame({'Company': ['BMW', 'Mercedes', 'Range Rover', 'Audi'], 'Model': ['X7', 'GLS', 'Velar', 'Q7'], 'Power(BHP)': [394.26, 549.81, 201.15, 241.4], 'Engine': ['3.0 L 6-cylinder', '4.0 L V8', '2.0 L 4-cylinder', '4.0 L V-8']}) #Exporting dataframe to Excel file df_cars.to_excel("converted-to-excel.xlsx")
Output Excel File
Open the excel file, and you shall see the index, column labels, and row data written to the file.
Bonus Tips
You are not only restricted to only control the excel file name rather with python dataframe exported to an Excel file, but you also have many functionalities available for customization in the pandas package.
You can change the name of the Sheet of the excel file
df.to_excel("output.xlsx", sheet_name='Sheet_name_1')
Use Excel writer to append to an existing excel file
pd.ExcelWriter('output.xlsx', mode='a')
Other options include render Engine, start row, header, index, merge cells, encoding, and many others.
Learn more about all the options available at Pandas official documentation.
Conclusion
I hope you now understand how to export a Pandas dataframe to Excel using the different libraries at hand. Do follow AskPython for more such interesting tutorials.
Write Excel with Python Pandas. You can write any data (lists, strings, numbers etc) to Excel, by first converting it into a Pandas DataFrame and then writing the DataFrame to Excel.
To export a Pandas DataFrame as an Excel file (extension: .xlsx, .xls), use the to_excel()
method.
Related course: Data Analysis with Python Pandas
installxlwt, openpyxl
to_excel()
uses a library called xlwt and openpyxl internally.
- xlwt is used to write .xls files (formats up to Excel2003)
- openpyxl is used to write .xlsx (Excel2007 or later formats).
Both can be installed with pip. (pip3 depending on the environment)
1 |
$ pip install xlwt |
Write Excel
Write DataFrame to Excel file
Importing openpyxl is required if you want to append it to an existing Excel file described at the end.
A dataframe is defined below:
1 |
import pandas as pd |
You can specify a path as the first argument of the to_excel() method
.
Note: that the data in the original file is deleted when overwriting.
The argument new_sheet_name
is the name of the sheet. If omitted, it will be named Sheet1
.
1 |
df.to_excel('pandas_to_excel.xlsx', sheet_name='new_sheet_name') |
Related course: Data Analysis with Python Pandas
If you do not need to write index (row name), columns (column name), the argument index, columns is False.
1 |
df.to_excel('pandas_to_excel_no_index_header.xlsx', index=False, header=False) |
Write multiple DataFrames to Excel files
The ExcelWriter object allows you to use multiple pandas. DataFrame objects can be exported to separate sheets.
As an example, pandas. Prepare another DataFrame object.
1 |
df2 = df[['a', 'c']] |
Then use the ExcelWriter() function like this:
1 |
with pd.ExcelWriter('pandas_to_excel.xlsx') as writer: |
You don’t need to call writer.save(), writer.close() within the blocks.
Append to an existing Excel file
You can append a DataFrame to an existing Excel file. The code below opens an existing file, then adds two sheets with the data of the dataframes.
Note: Because it is processed using openpyxl, only .xlsx files are included.
1 |
path = 'pandas_to_excel.xlsx' |
Related course: Data Analysis with Python Pandas
You can export Pandas DataFrame to an Excel file using to_excel.
Here is a template that you may apply in Python to export your DataFrame:
df.to_excel(r'Path where the exported excel will be storedFile Name.xlsx', index=False)
And if you want to export your DataFrame to a specific Excel Sheet, then you may use this template:
df.to_excel(r'Path of excelFile Name.xlsx', sheet_name='Your sheet name', index=False)
Note: you’ll have to install openpyxl if you get the following error:
ModuleNotFoundError: No module named ‘openpyxl’
You may then use PIP to install openpyxl as follows:
pip install openpyxl
In the next section, you’ll see a simple example, where:
- A DataFrame will be created from scratch
- Then, the DataFrame will be exported to an Excel file
Let’s say that you have the following dataset about products and their prices:
product_name | price |
computer | 1200 |
printer | 150 |
tablet | 300 |
monitor | 450 |
The ultimate goal is to export that dataset into Excel.
But before you export that data, you’ll need to create a DataFrame in order to capture this information in Python.
You may then use the following syntax to create the DataFrame:
import pandas as pd data = {'product_name': ['computer', 'printer', 'tablet', 'monitor'], 'price': [1200, 150, 300, 450] } df = pd.DataFrame(data) print(df)
This is how the DataFrame would look like:
product_name price
0 computer 1200
1 printer 150
2 tablet 300
3 monitor 450
Next, you’ll need to define the path where you’d like to store the exported Excel file.
For example, the path below will be used to store the exported Excel file (note that you’ll need to adjust the path to reflect the location where the Excel file will be stored on your computer):
r‘C:UsersRonDesktopexport_dataframe.xlsx’
Notice that 3 components were highlighted in relation to that path:
- In yellow, the ‘r’ character is placed before the path to avoid unicode error
- In blue, the file name to be created is specified. You may type a different file name based on your needs
- In green, the file type is specified. Since we are dealing with an Excel file, the file type would be ‘.xlsx’ for the latest version of Excel
Putting everything together, here is the full Python code to export Pandas DataFrame to an Excel file:
import pandas as pd data = {'product_name': ['computer', 'printer', 'tablet', 'monitor'], 'price': [1200, 150, 300, 450] } df = pd.DataFrame(data) df.to_excel(r'C:UsersRonDesktopexport_dataframe.xlsx', index=False)
Finally, run the above code in Python (adjusted to your path), and you’ll notice that a new Excel file (called export_dataframe) would be created at the location that you specified.
Note that if you wish to include the index, then simply remove “, index=False” from your code.
Additional Resources
You just saw how to export Pandas DataFrame to an Excel file. At times, you may need to export Pandas DataFrame to a CSV file. The concept would be similar in such cases.
You may also want to check the Pandas Documentation for additional information about df.to_excel.
We will save data from Pandas DataFrame to Excel file.
import pandas as pd
my_dict={
'NAME':['Ravi','Raju','Alex'],
'ID':[1,2,3],'MATH':[30,40,50],
'ENGLISH':[20,30,40]
}
df = pd.DataFrame(data=my_dict)
df.to_excel('D:my_file.xlsx')
-
to_excel() : DataFrame to excel file
By default we will have index as left most column. We can remove index by using option index=False
df.to_excel('D:my_file.xlsx',index=False)
Storing Path
We can keep in D drive ( root )
df.to_excel('D:my_file.xlsx')
Inside data directory
df.to_excel('D:datamy_file.xlsx')
Storing different worksheets
Excel has worksheets to store data in different sheets.
When we create a new excel file the data stored in Sheet1. We can create different Sheets and store data in different worksheets.
By using sheet_name we can store in worksheet with specific name sheet_name=’my_Sheet_1′
df.to_excel('D:my_file.xlsx',index=False,sheet_name='my_Sheet_1')
This will store our data in my_sheet_1 worksheet of file name my_file.xlsx at root of D drive.
multiple worksheets
We will use one object of ExcelWriter to create multiple worksheets in a excel file.
import pandas as pd
my_dict={
'NAME':['Ravi','Raju','Alex'],
'ID':[1,2,3],'MATH':[30,40,50],
'ENGLISH':[20,30,40]
}
df = pd.DataFrame(data=my_dict)
df2 = df.copy() # copy of df
with pd.ExcelWriter('D:my_file.xlsx') as my_excel_obj: #Object created
df.to_excel(my_excel_obj,sheet_name='my_Sheet_1')
df2.to_excel(my_excel_obj,sheet_name='my_Sheet_2')
Above code will create excel file with two worksheets. Here the new file name is my_file.xlsx with two worksheets.
Appending worksheets
We will add two more worksheets to the existing files by opening the file in append mode.
Note that we are using the same my_file.xlsx file created in above code.
We will be using mode=’a’ and engine=’openpyxl’ while creating the ExcelWriter object.
import pandas as pd
my_dict={
'NAME':['Ravi','Raju','Alex'],
'ID':[1,2,3],'MATH':[30,40,50],
'ENGLISH':[20,30,40]
}
df = pd.DataFrame(data=my_dict)
df2 = df.copy() # copy of df
with pd.ExcelWriter('D:my_file.xlsx',mode='a',engine='openpyxl') as my_excel_obj:
df.to_excel(my_excel_obj,sheet_name='my_Sheet_3')
df2.to_excel(my_excel_obj,sheet_name='my_Sheet_4')
This code will add two more worksheets my_Sheet_3 and my_Sheet_4 to existing workbook my_file.xlsx .
While executing the above code, you may get error saying Append mode is not supported with xlsxwriter. To solve this issue use engine=’openpyxl’ while creating the ExcelWriter object.
Data from MySQL table
We can read data from MySQL table and then store them in excel file.
import mysql.connector
import pandas as pd
my_connect = mysql.connector.connect(
host="localhost",
user="userid",
passwd="password",
database="my_tutorial"
)
####### end of connection ####
sql="SELECT * FROM student "
df = pd.read_sql(sql,my_connect )
df.to_excel('D:my_file.xlsx')
In above code we have first connected to MySQL database and then collected the records of student table by using read_sql() to a DataFrame. Finally we saved them in an excel file using to_excel().
Using SQLAlchemy MySQL connection
Read more on MySQL with SQLAlchemy connection. Below code will create student.xlsx file in the same directory, you can add path ( as above ) if you want the file to be created at different location.
import pandas as pd
from sqlalchemy import create_engine
my_conn = create_engine("mysql+mysqldb://userid:pw@localhost/my_db")
sql="SELECT * FROM student "
df = pd.read_sql(sql,my_conn)
df.to_excel('D:\my_data\student.xlsx') # Add the path
We can collect data of different classes from our student table and store them in one excel file by keeping in different worksheets. So all students of class Four will be in one worksheet named as Four and similarly another worksheet for class Three students. You can extend this to other classes also.
import pandas as pd
from sqlalchemy import create_engine
my_conn = create_engine("mysql+mysqldb://userid:pw@localhost/my_db")
sql="SELECT * FROM student WHERE class='Three'"
sql2="SELECT * FROM student WHERE class='Four'"
df=pd.read_sql(sql,my_conn) # class Three students
df2=pd.read_sql(sql2,my_conn) # class Four students
with pd.ExcelWriter('D:\my_data\student.xlsx',engine='openpyxl') as my_obj:
df.to_excel(my_obj,sheet_name='Three')
df2.to_excel(my_obj,sheet_name='Four')
More about xlsxwriter
Separator sep
By default sep=»,» , This is one char length strig used to spearate data in a row.
df.to_excel('D:my_file.xlsx',sep='#',index=False)
na_rep Blank data
How to handle if data is blank, we can use na_rep=’*’
df.to_excel('D:my_file.xlsx',na_rep='*')
Storing part of the data
We can filter the DataFrame and then save the rows in xlsx file. For this we will use our test.csv file as we have more rows.
Now let us store only two columns, class and name
import pandas as pd
df=pd.read_csv('test.csv')
df=df.loc[:,['class','name']]
df = pd.DataFrame(data=df)
df.to_excel('my_file.xlsx',index=False)
We can use various other filters to manage the data and store in CSV file. You can rad more on filters sections.
Data input and output from Pandas DataFrame
Pandas
read_csv
to_csv
read_excel
to_string()