Microsoft Excel是一个跨平台和经过战斗考验的电子表格软件,广泛用于数据分析和可视化。它确实是一个强大的、用户友好的工具!但是,我们怎样才能使它更上一层楼呢?
我们可以将Excel与Python结合起来,以便
请继续阅读,如果听起来不错的话,请继续关注我的Excel in Python系列。
本教程是关于将数据保存到Excel。
具体来说,我将首先介绍Excel的数据结构和lingos。
然后,你将学习四种流行的Python保存数据到Excel的方式的区别,包括pandas
和openpyxl
。
最后,我将重点介绍 **pandas.DataFrame.to_excel()**
方法。我将引导你在pandas.DataFrame.to_excel()
,从一个Excel工作表、多个Excel工作表、多个Excel工作簿和处理索引情况等四个实际用例。
你可以在这里找到本教程中的所有数据集和代码。我们的示例数据集中的数据不是实际数据,仅用于教育目的。
Excel的快速介绍
在开始保存数据到Excel之前,让我们先看看数据是如何在Excel中存储的,并熟悉一些Excel的术语。
简单地说,数据存储在Excel的单元格中,每个单元格都可以通过其独特的行和列的编号对来识别。
Excel中的列是用字母标注的,从 "A
"开始,而行是用罗马数字标注的,从 "1
"开始。例如,在下面的Excel图片中,A1
是第一列和第一行的交叉处的单元格,'ID'。
是的,你明白了!这就像我们的朋友pandas中的DataFrame数据结构。
而如果你想选择一个区域将数据转储到Excel中,你可以想象根据该部分的左上角单元格绘制一个矩形数据区域。
在此基础上,其他常见的Excel语义包括工作表和工作簿。
- 工作表指的是一个Excel文件中的单个电子表格。
- 一个工作簿 指的是一个单一的Excel文件,其扩展名是:
.xlsx
和.xls
。
提示:Excel支持的更多文件扩展名可以在微软官方文档中找到 这里.
现在,你已经准备好知道如何将数据保存到Excel中了!
流行的Python保存数据到Excel的方法
下面是流行的Python保存数据到Excel的方法的总结。
pandas.DataFrame.to_excel()
'的优势之一是引擎兼容性。它为不同的Excel扩展使用了多个外部引擎,包括openpyxl
,xlwt
, 和xlsxwriter
。
- "
xlwt
" 支持旧式的微软Excel 95至2003版本的文件(.xls
)。 - "
openpyxl
" 支持较新的Excel 2010文件格式(.xlsx, .xlsm, .xltx, .xltm
)。 - "
xlsxwriter
" 支持Excel 2007+文件格式(.xlsx
)。
总之,你可以使用openpyxl
和其他库来处理特定的Excel文件格式和基本的数据处理。并且请记住,openpyxl
和xlsxwriter
支持较新的 Excel 文件格式。
然而,我建议在数据科学和分析应用中使用pandas.DataFrame.to_excel()
,因为它支持大多数Excel文件格式,并接受具有强大方法的DataFrame对象。
因此,让我们看看如何使用pandas.DataFrame.to_excel()
来保存数据到Excel!
保存数据到Excel - pandas.DataFrame.to_excel()
由于pandas.DataFrame.to_excel()
是从不同扩展名的 Excel 文件中保存数据的最强大和最包容的方法,我将首先介绍它的语法,并在下面用真实的 Python 代码引导你完成三个用例,使用pandas.DataFrame.to_excel()
。
认识pandas.ExcelWriter
在进入pandas.DataFrame.to_excel
方法之前,我们需要认识一个新朋友,pandas.ExcelWriter
。它是一个用于将pandas.DataFrame
对象写入excel表格的类。
当你试图写入多个工作表时,你需要创建一个ExcelWriter
对象并将其作为第一个参数传递给pandas.DataFrame.to_excel()
。
为了创建一个ExcelWriter
对象,我们根据它的语法向它传递一些东西。
# Syntax for pandas.ExcelWriter
pandas.ExcelWriter(path[, engine=None[, date_format=None[, datetime_format=None[, mode='w'[, storage_options=None[, if_sheet_exists=None[, engine_kwargs=None[, **kwargs]]]]]])
参数 | 元 | 描述 |
---|---|---|
path | 需要 | 字符串或typing.BinaryIO 到一个Excel文件。 |
engine | 可选的 | 字符串,指定用于写入的引擎。缺省是使用: |
xlwt forxls | ||
xlsxwriter forxlsx ifxlsxwriter is installed otherwiseopenpyxl | ||
odf for |
ods
|
| date_format
| 可选的 | 写入Excel文件的日期格式字符串(例如:'YYYY-MM-DD'
)。 |
| datetime_format
| 可选的 | 写入Excel文件的datetime
对象的格式字符串。(例如:'YYYY-MM-DD HH:MM:SS'
)。 |
| mode
| 可选的 | 要使用的文件模式('w'
用于写入;'a'
用于追加)。默认使用'w'
。 |
| storage_options
| 可选的 | 一个对特定存储连接有意义的字典,如主机、端口、用户名、密码等。 |
| if_sheet_exists
| 可选的 | 如果在append模式下存在一个工作表,该怎么做。接受{'error', 'new', 'replace', 'overlay'}
。默认为'error'
。
error
:引发一个ValueError
。
new
:创建一个新的工作表,名称由引擎决定。
replace
:在写入工作表之前删除工作表的内容。
overlay
:向现有工作表写入内容,而不删除旧的内容。 |
| engine_kwargs
| 可选的 | 一个包含传入引擎的关键字参数的字典。 |
提示。一般来说,你只需要使用粗体字格式的四个参数。默认的引擎会根据文件的扩展名自动选择。
一个小提示:为了与CSV写入器兼容,ExcelWriter
,在写入前将列表和字典序列化为字符串。
最后,如果你使用 [with](https://blog.finxter.com/python-one-line-with-statement/)
语句来创建一个ExcelWriter
,你不需要担心在最后保存更改的问题!在with
语句中创建一个ExcelWriter
的示例代码是。
import pandas as pd
df = pd.DataFrame()
excel_wb56_filepath = 'learn_excel_56.xlsx'
# Syntax for create an ExcelWriter object in the with statement
# To create a new empty Excel file, learn_excel_56.xlsx with two new sheets!
with pd.ExcelWriter(excel_wb56_filepath) as writer:
df.to_excel(writer, sheet_name='Class 5')
df.to_excel(writer, sheet_name='Class 6')
运行代码后,我们创建了一个新的空的Excel文件,learn_excel_56.xlsx
,有两个新的工作表,第5类和第6类!
满足pandas.DataFrame.to_excel
Hooray!现在,让我们看看pandas.DataFrame.to_excel
方法的语法和参数,为后面的例子做好准备!
下面是pandas.DataFrame.to_excel
的语法。
# Syntax for pandas.DataFrame.to_excel
DataFrame.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]]]]]]]]]]]]]]]])
要将单个对象(pandas.DataFrame
)写入Excel.xlsx
文件,只需指定一个目标文件名。要写到多个工作表,必须创建一个带有目标文件名的ExcelWriter
对象。
参数 | 元 | 描述 |
---|---|---|
excel_writer | 需要 | 目标文件名或ExcelWriter 对象。 |
sheet_name | 可选的 | 包含DataFrame的工作表的名称。默认为"Sheet 1" 。 |
na_rep | 可选的 | 缺少的数据表示。Default = "" |
float_format | 可选的 | 浮点数的格式字符串。例如float_format="%.2f" ,将0.1234格式化为0.12。 |
column | 可选的 | 要写入的列(在DataFrame中)。 |
header | 可选的 | 作为标题的行,从数据部分排除。Default = True 如果是这样,则表示第一行。如果None ,则没有页眉。 |
index | 可选的 | 写入行名(索引)。默认为True ,表示显示索引。如果设置为False ,意味着在输出的Excel工作表中没有索引。 |
index_label | 可选的 | 索引的列标签。 |
startrow | 可选的 | 转储数据框架的左上角单元格行。默认为0。 |
startcol | 可选的 | 转储数据框架的左上角单元格列。默认为0。 |
engine | 可选的 | 指定用于写入的引擎的字符串。xls |
如果安装了xlsxwriter , | ||
默认为xlwt 。 | ||
如果安装了xlsxwriter ,默认为xlsx ;否则为openpyxl 。 | ||
merge_cells | 可选的 | 将MultiIndex 和Hierarchical Rows写成合并的单元。 |
encoding | 可选的 | 产生的EXCEL文件的编码。只有xlwt ,其他写入器都支持Unicode。 |
inf_rep | 可选的 | 表示无穷大(在Excel中没有关于无穷大的原始表示)。 |
verbose | 可选的 | 在错误日志中显示更多信息。 |
freeze_panes | 可选的 | 指定要冻结的基于最底层的行和最右边的列。 |
storage_options | 可选的 | 对特定的存储连接有意义的额外选项,例如:主机、端口、用户名、密码等。 |
提示:一般来说,你只需要使用粗体字格式的四个参数。
请现在尽量对这些参数有一个直觉,我将在下一个精彩的例子中介绍sheet_name
,index
, 和index_label
参数的细节!
开始使用
要使用pandas.DataFrame.to_excel
方法,你需要首先在你的命令行中安装 pandas
包。
$ pip install pandas
提示:你可能需要使用pip3
,而不是pip
,这取决于你的环境。
鉴于上面提到的引擎兼容性,你还需要安装各自的引擎库。例如,要使用openpyxl
,你需要在你的命令行中安装这个包。
$ pip install openpyxl
提示:你可能需要使用pip3
,而不是pip
,这取决于你的环境。
顺便说一下,如果你已经安装了Anaconda,你可以跳过这一步。
数据集
在我们的例子中,我们将创建Excel工作簿,就像我们第一个Excel in Python系列中的两个Excel工作簿(.xlsx
)、learn_excel_12
和learn_excel_34
。
这些工作簿在每个工作表中都有相同的数据结构和列名。例如,下面是learn_excel_12
工作簿中的Class_1
工作表的数据。
每张工作表中的一行代表每个班级的一个学生,各列分别代表该学生的ID、专业和分数。
具体来说,learn_excel_12
有两个工作表,1班和2班。而learn_excel_34
有两个工作表,即3班和4班。
你可以在这里找到本教程中的所有数据集和代码。我们的示例数据集中的数据不是实际数据,仅用于教育目的。
保存数据到一个工作表
那么,我们怎样才能将数据保存到一个excel工作表中呢?我们可以传递一个目标文件名,或者创建一个ExcelWriter
对象来实现!
对于我们的例子,我们可以创建一个新的Excel文件,learn_excel_56
,并将一些学生数据写入5级工作表,通过参数sheet_name
。
import pandas as pd
# For our writing mode example,
# we can create a new Excel file, learn_excel_56
# and write some student data into it.
excel_fp = 'learn_excel_56.xlsx'
class5_df = pd.DataFrame(
{'ID': [51, 52], 'Major': ['English', 'Math'], 'Score': [98, 89]})
with pd.ExcelWriter(excel_fp, mode='w') as writer:
class5_df.to_excel(writer, sheet_name='Class 5', index=False)
运行该代码后,我们可以得到输出的Excel文件。
保存数据到多个工作表
同样地,我们可以通过多次调用pandas.DataFrame.to_excel()
方法将数据保存到多个工作表。
在我们的例子中,我们可以创建一个新的Excel文件,learn_excel_56
,并将一些学生数据写入5班工作表和6班工作表中,通过参数sheet_name
。
import pandas as pd
# For our writing mode example,
# we can create a new Excel file, learn_excel_56
# and write some student data into it.
excel_fp = 'learn_excel_56.xlsx'
class5_df = pd.DataFrame(
{'ID': [51, 52], 'Major': ['English', 'Math'], 'Score': [98, 89]})
class6_df = pd.DataFrame(
{'ID': [61, 62], 'Major': ['History', 'Math'], 'Score': [78, 96]})
with pd.ExcelWriter(excel_fp, mode='w') as writer:
class5_df.to_excel(writer, sheet_name='Class 5', index=False)
class6_df.to_excel(writer, sheet_name='Class 6', index=False)
运行该代码后,我们可以得到输出的Excel文件。
保存数据到多个工作簿
要获得多个工作簿,我们可以直接创建多个pandas.ExcelWriter
对象。
举个简单的例子,让我们创建两个工作簿,learn_excel_78
和learn_excel_910
。
import pandas as pd
# let’s create two workbooks, learn_excel_78 and learn_excel_910.
wb78_fp = 'learn_excel_78.xlsx'
wb910_fp = 'learn_excel_910.xlsx'
df = pd.DataFrame()
with pd.ExcelWriter(wb78_fp, mode='w') as writer_78, pd.ExcelWriter(wb910_fp, mode='w') as writer_910:
df.to_excel(writer_78, sheet_name='Class 7', index=False)
df.to_excel(writer_78, sheet_name='Class 8', index=False)
df.to_excel(writer_910, sheet_name='Class 9', index=False)
df.to_excel(writer_910, sheet_name='Class 10', index=False)
运行代码后,我们可以得到输出的工作簿。
在learn_excel_78
文件中,我们可以看到我们已经创建了两个空工作表。
到目前为止,我们已经了解了基本的书写操作。让我们继续前进,处理最常见的问题--索引
处理索引
你可以在调用pandas.DataFrame.to_excel()
方法时设置索引和索引'列标签。
之前,我们的示例代码将索引设置为False
,这意味着在输出的Excel文件中没有索引列。让我们看看在多工作表的情况下,如果我们将索引设置为True
,会发生什么。
import pandas as pd
# For our writing mode example,
# we can create a new Excel file, learn_excel_56
# and write some student data into it.
excel_fp = 'learn_excel_56.xlsx'
class5_df = pd.DataFrame(
{'ID': [51, 52], 'Major': ['English', 'Math'], 'Score': [98, 89]})
class6_df = pd.DataFrame(
{'ID': [61, 62], 'Major': ['History', 'Math'], 'Score': [78, 96]})
with pd.ExcelWriter(excel_fp, mode='w') as writer:
class5_df.to_excel(writer, sheet_name='Class 5', index=True)
class6_df.to_excel(writer, sheet_name='Class 6', index=True)
运行代码后,我们可以看到,我们现在有一个索引列,从零开始计算。
在此基础上,我们可以通过指定参数index_label
,给索引列起一个列名。
import pandas as pd
# For our writing mode example,
# we can create a new Excel file, learn_excel_56
# and write some student data into it.
excel_fp = 'learn_excel_56.xlsx'
class5_df = pd.DataFrame(
{'ID': [51, 52], 'Major': ['English', 'Math'], 'Score': [98, 89]})
class6_df = pd.DataFrame(
{'ID': [61, 62], 'Major': ['History', 'Math'], 'Score': [78, 96]})
with pd.ExcelWriter(excel_fp, mode='w') as writer:
class5_df.to_excel(writer, sheet_name='Class 5',
index=True, index_label='No.')
class6_df.to_excel(writer, sheet_name='Class 6',
index=True, index_label='No.')
运行代码后,我们可以看到我们现在有了一个索引列,名称是 "No."!
总结
这就是如何保存数据到Excel。这是我们的 Excel in Python 系列中的第二篇文章。
我们了解了 Excel 的数据结构和常用的 lingos,以及用 Python 保存数据到 Excel 的四种常用方法,包括pandas
和openpyxl
。
最后,我们在pandas.DataFrame.to_excel
,看了四个实际的用例,范围包括一个Excel工作表、多个Excel工作表、多个Excel工作簿,以及处理索引情况。
我希望你喜欢这一切,请继续关注我们下面的Excel in Python文章:将数据保存到Excel!编码愉快!