看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
pandas.ExcelWriter
类除了其构造方法外,还包含多个属性和方法,帮助用户更灵活、高效地将 DataFrame
数据写入 Excel 文件。以下是对其主要属性和方法的详细介绍:
book
openpyxl
或 xlsxwriter
)创建的 Workbook 对象。通过 book
属性,用户可以直接访问和操作 Workbook 的底层结构,例如添加图表、设置单元格样式等高级功能。import pandas as pd
from openpyxl import Workbook
# 创建 ExcelWriter 对象
with pd.ExcelWriter('output.xlsx', engine='openpyxl') as writer:
df.to_excel(writer, sheet_name='Sheet1', index=False)
# 访问底层 Workbook 对象
workbook = writer.book
# 添加一个新的工作表
workbook.create_sheet('Sheet2')
date_format
str
或 None
'YYYY-MM-DD'
表示“年-月-日”格式。此属性用于格式化 DataFrame
中的日期列,以确保在 Excel 中显示为所需的格式。import pandas as pd
from datetime import datetime
# 构造示例数据
data = {
'姓名': ['艾丽丝', '鲍勃'],
'出生日期': [datetime(1990, 1, 1), datetime(1995, 5, 15)]
}
df = pd.DataFrame(data)
# 创建 ExcelWriter 对象并指定日期格式
with pd.ExcelWriter('output_dates.xlsx', date_format='YYYY-MM-DD') as writer:
df.to_excel(writer, sheet_name='出生信息', index=False)
datetime_format
str
或 None
'YYYY-MM-DD HH:MM:SS'
表示“年-月-日 时:分:秒”格式。用于格式化 DataFrame
中的日期时间列。import pandas as pd
from datetime import datetime
# 构造示例数据
data = {
'姓名': ['艾丽丝', '鲍勃'],
'登录时间': [datetime(2023, 10, 1, 14, 30), datetime(2023, 10, 2, 16, 45)]
}
df = pd.DataFrame(data)
# 创建 ExcelWriter 对象并指定日期时间格式
with pd.ExcelWriter('output_datetime.xlsx', datetime_format='YYYY-MM-DD HH:MM:SS') as writer:
df.to_excel(writer, sheet_name='登录记录', index=False)
engine
str
'openpyxl'
: 用于 .xlsx
文件,支持丰富的格式和功能。'xlsxwriter'
: 用于 .xlsx
文件,提供高级格式控制和图表功能。'odf'
: 用于 OpenDocument 格式(如 .ods
)。'pyxlsb'
: 用于二进制 Excel 文件(.xlsb
)。'auto'
: 自动选择可用的引擎(优先选择 openpyxl
)。import pandas as pd
# 使用 xlsxwriter 引擎
with pd.ExcelWriter('output_xlsxwriter.xlsx', engine='xlsxwriter') as writer:
df.to_excel(writer, sheet_name='Sheet1', index=False)
if_sheet_exists
{'error', 'new', 'replace'}
'error'
: 抛出错误,默认行为。'new'
: 创建一个新的工作表,名称会自动更改以避免冲突。'replace'
: 替换已存在的工作表。import pandas as pd
# 假设 'Sheet1' 已存在,选择替换
with pd.ExcelWriter('output_if_exists.xlsx', mode='a', engine='openpyxl', if_sheet_exists='replace') as writer:
df.to_excel(writer, sheet_name='Sheet1', index=False)
sheets
dict
sheets
属性,用户可以访问和操作已存在的工作表对象,例如设置单元格格式、添加图表等。import pandas as pd
from openpyxl import Workbook
# 创建 ExcelWriter 对象
with pd.ExcelWriter('output_sheets.xlsx', engine='openpyxl') as writer:
df.to_excel(writer, sheet_name='Sheet1', index=False)
# 访问工作表对象
sheets = writer.sheets
sheet1 = sheets['Sheet1']
# 例如,设置列宽
sheet1.column_dimensions['A'].width = 20
supported_extensions
类型: list
描述: 返回当前写入引擎支持的文件扩展名列表。例如,['.xlsx', '.xlsm']
表示支持 .xlsx
和 .xlsm
格式的文件。
示例:
import pandas as pd
# 创建 ExcelWriter 对象
writer = pd.ExcelWriter('output_supported_extensions.xlsx', engine='openpyxl')
print(writer.supported_extensions)
writer.close()
输出示例:
['.xlsx', '.xlsm', '.xltx', '.xltm']
check_extension(ext)
类型: classmethod
描述: 检查给定的文件扩展名是否与当前写入引擎支持的扩展名相匹配。如果不匹配,将抛出 ValueError
。
参数:
ext
: str
,文件扩展名(包括点,如 .xlsx
)。返回值: None
,如果扩展名受支持;否则,抛出错误。
示例:
import pandas as pd
# 检查扩展名是否受支持
try:
pd.ExcelWriter.check_extension('.xlsx')
print("扩展名受支持。")
except ValueError as e:
print(e)
输出示例:
扩展名受支持。
close()
ExcelWriter
对象,保存所有写入的数据并释放资源。通常在使用 with
语句时无需手动调用此方法,因为 with
语句会自动处理关闭操作。但在不使用 with
语句时,需要手动调用 close()
以确保数据正确保存。import pandas as pd
# 创建 ExcelWriter 对象并写入数据
writer = pd.ExcelWriter('output_close.xlsx', engine='openpyxl')
df.to_excel(writer, sheet_name='Sheet1', index=False)
# 手动关闭
writer.close()
生成复杂的报表
数据备份
格式控制和高级功能
openpyxl
或 xlsxwriter
引擎,设置单元格格式、添加图表、设置列宽等,以生成具有专业外观的 Excel 报表。追加数据
远程存储写入
storage_options
,将数据直接写入远程存储系统(如 Amazon S3),适用于云计算和分布式环境。import pandas as pd
# 构造示例数据
data = {
'姓名': ['艾丽丝', '鲍勃', '查理'],
'年龄': [30, 25, 35],
'城市': ['纽约', '洛杉矶', '芝加哥']
}
df = pd.DataFrame(data)
# 创建 ExcelWriter 对象并写入数据
with pd.ExcelWriter('output_single_sheet.xlsx') as writer:
df.to_excel(writer, sheet_name='Sheet1', index=False)
输出文件: output_single_sheet.xlsx
包含一个名为 Sheet1
的工作表,数据如下:
姓名 年龄 城市
艾丽丝 30 纽约
鲍勃 25 洛杉矶
查理 35 芝加哥
import pandas as pd
# 构造示例数据
data1 = {
'姓名': ['艾丽丝', '鲍勃', '查理'],
'年龄': [30, 25, 35],
'城市': ['纽约', '洛杉矶', '芝加哥']
}
df1 = pd.DataFrame(data1)
data2 = {
'产品': ['A', 'B', 'C'],
'销量': [1000, 800, 600],
'收入': [50000, 40000, 30000]
}
df2 = pd.DataFrame(data2)
# 创建 ExcelWriter 对象并写入多个工作表
with pd.ExcelWriter('output_multiple_sheets.xlsx') as writer:
df1.to_excel(writer, sheet_name='人员信息', index=False)
df2.to_excel(writer, sheet_name='销售数据', index=False)
输出文件: output_multiple_sheets.xlsx
包含两个工作表:
人员信息
销售数据
工作表名称: 人员信息
姓名 年龄 城市
艾丽丝 30 纽约
鲍勃 25 洛杉矶
查理 35 芝加哥
工作表名称: 销售数据
产品 销量 收入
A 1000 50000
B 800 40000
C 600 30000
import pandas as pd
from datetime import datetime
# 构造示例数据
data = {
'姓名': ['艾丽丝', '鲍勃'],
'出生日期': [datetime(1990, 1, 1), datetime(1995, 5, 15)]
}
df = pd.DataFrame(data)
# 创建 ExcelWriter 对象并指定日期格式
with pd.ExcelWriter('output_dates.xlsx', date_format='YYYY-MM-DD') as writer:
df.to_excel(writer, sheet_name='出生信息', index=False)
输出文件: output_dates.xlsx
中的 出生信息
工作表,日期格式为 YYYY-MM-DD
。
姓名 出生日期
艾丽丝 1990-01-01
鲍勃 1995-05-15
假设已有一个名为 output_append.xlsx
的 Excel 文件,包含一个工作表 Sheet1
。现在需要向其中追加一个新的工作表 Sheet2
。
import pandas as pd
# 构造新数据
data_new = {
'产品': ['D', 'E'],
'销量': [400, 200],
'收入': [20000, 10000]
}
df_new = pd.DataFrame(data_new)
# 创建 ExcelWriter 对象,指定模式为追加
with pd.ExcelWriter('output_append.xlsx', mode='a', engine='openpyxl') as writer:
# 将新 DataFrame 写入 'Sheet2'
df_new.to_excel(writer, sheet_name='Sheet2', index=False)
输出文件: output_append.xlsx
现在包含两个工作表 Sheet1
和 Sheet2
。
工作表名称: Sheet1
姓名 年龄 城市
艾丽丝 30 纽约
鲍勃 25 洛杉矶
查理 35 芝加哥
工作表名称: Sheet2
产品 销量 收入
D 400 20000
E 200 10000
import pandas as pd
# 构造示例数据
data = {
'姓名': ['大卫', '伊丽莎'],
'年龄': [28, 32],
'城市': ['波士顿', '旧金山']
}
df = pd.DataFrame(data)
# 创建 ExcelWriter 对象,指定模式为覆盖,并替换已存在的工作表
with pd.ExcelWriter('output_if_exists.xlsx', mode='w', if_sheet_exists='replace') as writer:
df.to_excel(writer, sheet_name='人员信息', index=False)
输出文件: output_if_exists.xlsx
中的 人员信息
工作表被替换为新的数据。
姓名 年龄 城市
大卫 28 波士顿
伊丽莎 32 旧金山
import pandas as pd
# 构造示例数据
data1 = {
'姓名': ['艾丽丝', '鲍勃', '查理'],
'年龄': [30, 25, 35],
'城市': ['纽约', '洛杉矶', '芝加哥']
}
df1 = pd.DataFrame(data1)
data2 = {
'产品': ['A', 'B', 'C'],
'销量': [1000, 800, 600],
'收入': [50000, 40000, 30000]
}
df2 = pd.DataFrame(data2)
# 创建 ExcelWriter 对象
with pd.ExcelWriter('output_multiple_regions.xlsx', engine='xlsxwriter') as writer:
# 将第一个 DataFrame 写入 'Sheet1' 的 A1 单元格
df1.to_excel(writer, sheet_name='Sheet1', startrow=0, startcol=0, index=False)
# 将第二个 DataFrame 写入 'Sheet1' 的 E1 单元格
df2.to_excel(writer, sheet_name='Sheet1', startrow=0, startcol=4, index=False)
输出文件: output_multiple_regions.xlsx
的 Sheet1
中,df1
数据位于 A1 单元格开始,df2
数据位于 E1 单元格开始。
A1 单元格开始:
姓名 年龄 城市
艾丽丝 30 纽约
鲍勃 25 洛杉矶
查理 35 芝加哥
E1 单元格开始:
产品 销量 收入
A 1000 50000
B 800 40000
C 600 30000
import pandas as pd
# 构造示例数据
data = {
'姓名': ['张三', '李四', '王五'],
'部门': ['IT', '销售', '人事'],
'工资': [7000, 6500, 6000]
}
df = pd.DataFrame(data)
# 自定义引擎参数,例如 xlsxwriter 的格式设置
engine_kwargs = {
'options': {'strings_to_numbers': True}
}
# 创建 ExcelWriter 对象并传递引擎参数
with pd.ExcelWriter('output_engine_kwargs.xlsx', engine='xlsxwriter', engine_kwargs=engine_kwargs) as writer:
df.to_excel(writer, sheet_name='员工信息', index=False)
输出文件: output_engine_kwargs.xlsx
的 员工信息
工作表,数据按照自定义引擎参数进行格式设置。
员工信息工作表内容:
姓名 部门 工资
张三 IT 7000
李四 销售 6500
王五 人事 6000
ExcelWriter
和 ExcelFile
进行高级操作import pandas as pd
# 构造示例数据
data_existing = {
'姓名': ['赵六', '周七'],
'年龄': [28, 32],
'城市': ['北京', '上海']
}
df_existing = pd.DataFrame(data_existing)
data_new = {
'姓名': ['孙八', '吴九'],
'年龄': [26, 29],
'城市': ['广州', '深圳']
}
df_new = pd.DataFrame(data_new)
# 首先,创建一个包含初始数据的 Excel 文件
with pd.ExcelWriter('output_combined.xlsx', mode='w', engine='openpyxl') as writer:
df_existing.to_excel(writer, sheet_name='人员信息', index=False)
# 使用 ExcelWriter 追加新的数据到同一个工作表
with pd.ExcelWriter('output_combined.xlsx', mode='a', engine='openpyxl', if_sheet_exists='overlay') as writer:
# 获取现有的人员信息工作表
book = writer.book
writer.sheets = {ws.title: ws for ws in book.worksheets}
# 追加新的数据到 '人员信息' 工作表
startrow = writer.sheets['人员信息'].max_row
df_new.to_excel(writer, sheet_name='人员信息', index=False, header=False, startrow=startrow)
输出文件: output_combined.xlsx
的 人员信息
工作表包含初始数据和追加的数据。
人员信息工作表内容:
姓名 年龄 城市
赵六 28 北京
周七 32 上海
孙八 26 广州
吴九 29 深圳
ExcelWriter
类 提供了一种灵活而强大的方法,将 Pandas 的 DataFrame
数据写入 Excel 文件。通过配置不同的参数,用户可以控制写入过程中的各种细节,如选择写入引擎、设置日期格式、决定写入模式(覆盖或追加)等。
主要属性 如 book
、date_format
、datetime_format
、engine
、if_sheet_exists
、sheets
和 supported_extensions
,为用户提供了对写入过程和文件结构的深入控制。
主要方法 如 check_extension(ext)
和 close()
,帮助用户验证文件格式并确保数据正确保存。
使用场景 广泛,包括生成复杂的报表、备份数据、向多个工作表中写入数据以及与其他系统集成等。特别是在需要写入多个工作表或处理大型数据集时,ExcelWriter
显得尤为重要。
通过掌握 pandas.ExcelWriter
类的属性和方法,用户可以更高效地将数据导出为 Excel 格式,满足各种数据分享、报告生成和存档需求,充分发挥 Pandas 强大的数据处理能力。
更新时间:2024-10-10 15:56:56 标签:pandas python excel