使用 to_excel 将 Python Pandas DataFrame 导出到 Excel

2023-10-18

The to_excel功能允许您导出PandasDataFrame 到 Excel 文件。这对每个数据科学家都非常有益。

本教程将让您全面了解如何to_excel函数的工作原理,以及如何自定义其行为以满足您的需求。

 

 

基本语法和参数

的基本语法为to_excelPandas 中的函数如下:


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)
  

我们简单讨论一下最常用的参数:

  • excel_writer:这是目标文件名或ExcelWriter对象。
  • sheet_name:Excel 文件中工作表的名称。默认为“Sheet1”。
  • na_rep:这是要使用的 NaN 的字符串表示形式。
  • float_format:用于浮点数的格式。
  • columns:要写入 Excel 文件的列。
  • header:写出列名。如果给出了字符串列表,则假定它是列名的别名。
  • index:写入行名称(索引)。
  • startrow & startcol:用于转储 DataFrame 的左上单元格行和列。
  • engine:编写要使用的引擎,‘openpyxl’或‘xlsxwriter’。

The to_excel函数提供了强大的功能,用于自定义数据导出到 Excel。接下来,我们将深入探讨如何有效使用它的示例。

 

将 Pandas DataFrame 导出到 Excel 文件

首先,让我们导入 Pandas 并创建一个数据框作为起点:


import pandas as pd
# import numpy for sample data
import numpy as np
df = pd.DataFrame({
   'A': 1.,
   'B': pd.Timestamp('20130620'),
   'C': pd.Series(1, index=list(range(4)), dtype='float32'),
   'D': np.array([3] * 4, dtype='int32'),
   'E': pd.Categorical(["test", "train", "test", "train"]),
   'F': 'foo'
})
print(df)
  

Output:


     A          B    C  D      E    F
0  1.0 2013-06-20  1.0  3   test  foo
1  1.0 2013-06-20  1.0  3  train  foo
2  1.0 2013-06-20  1.0  3   test  foo
3  1.0 2013-06-20  1.0  3  train  foo
  

在这里,我们创建了一个混合了数字类型、字符串和分类数据的 DataFrame。

我们可以使用to_excel函数将 DataFrame 写入 Excel 工作表,如下所示:


df.to_excel("example.xlsx")
  

这将写入 DataFramedf到一个名为example.xlsx。默认情况下,导出的 Excel 文件中包含标题和索引。生成的 Excel 文件如下所示:


  |   A          B    C  D      E    F
--|--------------------------------------
0 | 1.0 2013-06-20  1.0  3   test  foo
1 | 1.0 2013-06-20  1.0  3  train  foo
2 | 1.0 2013-06-20  1.0  3   test  foo
3 | 1.0 2013-06-20  1.0  3  train  foo
  

需要注意的是,DataFrame 的索引已被写入 Excel 文件中的第一列。

Excel 文件中的其余列 (A to F)对应于 DataFrame 的列。
在这种情况下,to_excel函数创建一个新文件。如果文件名已经存在,该函数将覆盖现有文件的内容。

 

选择写入引擎

Pandas to_excel功能允许您选择用于写入 Excel 文件的引擎。您可以使用engine参数来指定您要使用的引擎。

这是引擎:

  1. openpyxl
  2. XLSX作家

让我们使用以下代码编写 DataFramexlsxwriter engine:


df.to_excel("example_xlsxwriter.xlsx", engine='xlsxwriter')
  

这将创建一个名为的 Excel 文件example_xlsxwriter.xlsx使用xlsxwriter engine.

引擎的选择可能会影响可用于写入 Excel 文件的功能,例如添加图表、条件格式设置等。
请记住,所选引擎需要安装在您的 Python 环境中,因此如果尚未安装,请确保使用 pip 安装它。


pip install xlsxwriter
  

 

将多个 Pandas DataFrame 写入多个工作表

要将多个 pandas DataFrame 写入 Excel 文件的多个工作表,您可以使用ExcelWriter对象,它允许您指定每个 DataFrame 的工作表名称。

让我们创建两个不同的 DataFrame 并将它们写入同一 Excel 工作簿中的两个不同工作表:


df_sheet1 = pd.DataFrame({
    'A': ['foo', 'bar', 'baz', 'qux'],
    'B': ['alpha', 'beta', 'gamma', 'delta'],
    'C': np.random.rand(4),
    'D': np.random.randint(10, size=4)
})

df_sheet2 = pd.DataFrame({
    'E': ['apple', 'banana', 'cherry', 'date'],
    'F': ['elephant', 'fox', 'giraffe', 'hippo'],
    'G': np.random.rand(4),
    'H': np.random.randint(10, size=4)
})

# create an ExcelWriter object
with pd.ExcelWriter("example_multiple_dataframes.xlsx") as writer:
    df_sheet1.to_excel(writer, sheet_name='FirstSheet')
    df_sheet2.to_excel(writer, sheet_name='SecondSheet')
  

在生成的 Excel 文件中,您将找到两个名为“FirstSheet”和“SecondSheet”的工作表,每个工作表都包含来自各自 DataFrame 的数据:

第一张:


   |  A  |   B   |        C       |  D  
-- |---------------------------------------
0  | foo | alpha | 0.618012313202 |  6  
1  | bar | beta  | 0.912971647978 |  8  
2  | baz | gamma | 0.344552180436 |  0  
3  | qux | delta | 0.982718734163 |  9  
  

第二张:


   |   E   |    F    |        G       |  H  
-- |------------------------------------------
0  | apple | elephant| 0.329873331859 |  7  
1  | banana| fox     | 0.751442750918 |  3  
2  | cherry| giraffe | 0.510241492448 |  2  
3  | date  | hippo   | 0.920831290307 |  0  
  

 

使用 na_rep 参数处理丢失数据

您可以使用na_rep参数来表示将 DataFrame 导出到 Excel 文件时缺失的值。

让我们创建一个包含一些缺失值的 DataFrame 来演示这一点:


df_na = pd.DataFrame({
   'A': 1.,
   'B': pd.Timestamp('20130620'),
   'C': pd.Series(1, index=list(range(4)), dtype='float32'),
   'D': np.array([3] * 4, dtype='int32'),
   'E': pd.Categorical(["test", "train", np.nan, "train"]),
   'F': 'foo'
})
print(df_na)
  

Output:


     A          B    C  D      E    F
0  1.0 2013-06-20  1.0  3   test  foo
1  1.0 2013-06-20  1.0  3  train  foo
2  1.0 2013-06-20  1.0  3    NaN  foo
3  1.0 2013-06-20  1.0  3  train  foo
  

您可以看到“E”列中有一个 NaN 值。当我们将这个DataFrame写入Excel文件时,我们可以选择如何表示这个NaN值。


df_na.to_excel("example_na_rep.xlsx", na_rep='NULL')
  

在 Excel 文件中,“E”列中的 NaN 值被替换为“NULL”。

 

格式化浮点数

The float_format的参数to_excel函数提供对浮点数格式化的控制。

此参数采用格式化字符串或函数来指示如何将浮点数转换为字符串。让我们创建一个带有浮点数的 DataFrame:


df_float = pd.DataFrame({
    'A': 1.123456789,
    'B': np.array([3.1415926535] * 4, dtype='float64'),
}, index=list('abcd'))
print(df_float)
  

Output:


          A         B
a  1.123457  3.141593
b  1.123457  3.141593
c  1.123457  3.141593
d  1.123457  3.141593
  

例如,如果我们希望 DataFrame 中的所有浮点数四舍五入到小数点后两位,我们可以使用格式化字符串,如下所示:


df_float.to_excel("example_float_format.xlsx", float_format="%.2f")
  

在生成的 Excel 文件中,所有浮点数均以两位小数表示。

Excel 文件中的数据应如下所示:


  |   A    B
--|-----------------
a | 1.12 3.14
b | 1.12 3.14
c | 1.12 3.14
d | 1.12 3.14
  

 

选择用于 Excel 导出的 DataFrame 列

您可以使用columns的参数to_excel函数导出 DataFrame 的特定列。考虑一个具有多列的 DataFrame:


df_multi = pd.DataFrame({
   'A': pd.date_range(start='2020-01-01', periods=4),
   'B': pd.Series(range(4), dtype='float32'),
   'C': np.array([3] * 4, dtype='int32'),
   'D': pd.Categorical(["test", "train", "check", "go"]),
   'E': 'foo'
})
print(df_multi)
  

Output:


           A    B  C      D    E
0 2020-01-01  0.0  3   test  foo
1 2020-01-02  1.0  3  train  foo
2 2020-01-03  2.0  3  check  foo
3 2020-01-04  3.0  3     go  foo
  

如果我们只想将‘A’和‘D’列导出到Excel文件中,我们可以在to_excel功能:


df_multi.to_excel("example_select_columns.xlsx", columns=['A', 'D'])
  

生成的 Excel 文件将仅包含 DataFrame 中的“A”和“D”列:


  |        A     D
--|-----------------
0 | 2020-01-01 test
1 | 2020-01-02 train
2 | 2020-01-03 check
3 | 2020-01-04 go
  

 

自定义列标题

The header的参数to_excel函数允许您自定义 Excel 文件的列标题。

您可以将字符串列表传递给header参数,假定它们是列名的别名。
让我们考虑一下之前创建的 DataFrame,假设我们想要在导出到 Excel 文件时更改列标题:


print(df_multi)
  

Output:


           A    B  C      D    E
0 2020-01-01  0.0  3   test  foo
1 2020-01-02  1.0  3  train  foo
2 2020-01-03  2.0  3  check  foo
3 2020-01-04  3.0  3     go  foo
  

我们可以按如下方式更改列标题:


df_multi.to_excel("example_custom_headers.xlsx", header=['Date', 'Value_1', 'Value_2', 'Category', 'Label'])
  

在生成的 Excel 文件中,列标题将替换为列表中提供的名称:


  |       Date Value_1 Value_2 Category Label
--|-------------------------------------------
0 | 2020-01-01     0.0      3     test   foo
1 | 2020-01-02     1.0      3    train   foo
2 | 2020-01-03     2.0      3    check   foo
3 | 2020-01-04     3.0      3       go   foo
  

 

操纵索引

The index参数允许您控制 DataFrame 的索引是否应包含在生成的 Excel 文件中。

默认情况下,索引写入 Excel 文件。如果你想排除它,可以设置index=False.
我们以 DataFrame 为例:


df_index = pd.DataFrame({
    'A': ['foo', 'bar', 'baz', 'qux'],
    'B': ['alpha', 'beta', 'gamma', 'delta'],
    'C': np.random.rand(4)
}, index=['I1', 'I2', 'I3', 'I4'])
print(df_index)
  

Output:


      A      B         C
I1  foo  alpha  0.647687
I2  bar   beta  0.377563
I3  baz  gamma  0.013572
I4  qux  delta  0.658623
  

我们可以将此 DataFrame 导出到不带索引的 Excel 文件:


df_index.to_excel("example_no_index.xlsx", index=False)
  

生成的 Excel 文件将仅包含数据,不包含索引:


  A        B         C
foo    alpha  0.647687
bar    beta   0.377563
baz    gamma  0.013572
qux    delta  0.658623
  

 

控制 Excel 输出位置

The to_excel函数提供了控制 DataFrame 在 Excel 工作表中开始写入位置的选项。

您可以使用startrow and startcol参数来调整 DataFrame 所在的位置。
让我们将 DataFrame 写入 Excel 文件,但这次我们将从第三行第二列开始:


df_position = pd.DataFrame({
    'A': ['foo', 'bar', 'baz'],
    'B': ['alpha', 'beta', 'gamma']
})
df_position.to_excel("example_output_location.xlsx", startrow=2, startcol=1, index=False)
  

在生成的 Excel 文件中,DataFrame 中的数据从第三行(行索引为 0)和第二列(列索引为 0)开始:


  |  1  |    2   |    3   |
--|------------------------
1 |     |        |        |
2 |     |        |        |
3 |     |  A     |  B     |
4 |     |  foo   |  alpha |
5 |     |  bar   |  beta  |
6 |     |  baz   |  gamma |
  

正如你所看到的,DataFramedf_position以 Excel 表示法从单元格 B3 开始写入(第 3 行,第 2 列)。

 

使用 to_excel 控制单元格合并

默认情况下,处理使用 MultiIndex 的 DataFrame 时会合并单元格。

但是,您可以使用merge_cells参数来控制是否在生成的 Excel 文件中合并具有相同值的单元格。让我们创建一个带有 MultiIndex 的 DataFrame:


df_merge = pd.DataFrame({
    'A': [1, 2, 3, 4],
    'B': [5, 6, 7, 8],
    'C': [9, 10, 11, 12]
}, index=[['a', 'a', 'b', 'b'], ['foo', 'bar', 'foo', 'bar']])
print(df_merge)
  

Output:


       A  B   C
a foo  1  5   9
  bar  2  6  10
b foo  3  7  11
  bar  4  8  12
  

如果我们将此 DataFrame 写入 Excel 文件merge_cells=True,具有相同索引值的单元格将被合并:


df_merge.to_excel("example_merge_cells_true.xlsx", merge_cells=True)
  

但是,如果我们设置merge_cells=False,单元格不会被合并:


df_merge.to_excel("example_merge_cells_false.xlsx", merge_cells=False)
  

Output:


  |    1  |  2  |  3  |  4  |
--|---------------------------
a |  foo  |  1  |  5  |  9  |
a |  bar  |  2  |  6  |  10 |
b |  foo  |  3  |  7  |  11 |
b |  bar  |  4  |  8  |  12 |
  

在第一种情况下,“a”和“b”索引值将在生成的 Excel 文件中各跨两行,因为它们在“foo”和“bar”子索引中重复。在第二种情况下,‘a’和‘b’值将出现在每一行中,而不被合并。

 

Excel导出救星

我与一家金融科技公司签约,该公司向市场推出了一种新的金融产品。经过六个月的运营后,该公司希望分析绩效数据以得出见解并制定未来战略。

任务是在 Python 中执行复杂的分析,然后将结果以 Excel 报告形式呈现给我们的非技术利益相关者。我使用 Python 的 psycopg2 连接我们的 PostgreSQL 数据库和 Pandas 进行数据操作。

我的工作是将分析结果转换为 Excel,同时保留数据的结构和格式。这就是to_excelPandas 的功能变得无价。

考虑一个数据框df_customer_demographics包含详细的基于人口统计的分析。我将其导出到 Excel 文件:


df_customer_demographics.to_excel("analysis_report.xlsx", sheet_name='Customer Demographics', index=False)
  

接下来,我有另一个 DataFramedf_product_performance,我需要将其放入同一个 Excel 文件中,但放在不同的工作表上:


with pd.ExcelWriter('analysis_report.xlsx', engine='openpyxl', mode='a') as writer:
    df_product_performance.to_excel(writer, sheet_name='Product Performance', index=False)
  

在几个小时内,我使用 Pandas 根据我们的大规模数据创建了一份全面的多表 Excel 报告to_excel.

 

进一步阅读

https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.to_excel.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 to_excel 将 Python Pandas DataFrame 导出到 Excel 的相关文章

随机推荐

  • 如何在 Ubuntu 20.04 上安装 GCC (build-essential)

    GNU 编译器集合 GCC 是 C C Objective C Fortran Ada Go D 编程语言 很多开源项目 包括Linux内核和GNU工具 都是使用GCC编译的 本文介绍如何在 Ubuntu 20 04 上安装 GCC 在 U
  • 如何在 Debian 9 上安装和使用 FFmpeg

    FFmpeg 是一个免费的开源命令行工具 用于对多媒体文件进行转码 它包含一组共享的音频和视频库 例如libavcodec libavformat和libavutil 使用 FFmpeg 您可以在各种视频和音频格式之间进行转换 设置采样率以
  • 如何在 Ubuntu 18.04 上安装 Python 3.7

    Python 是世界上最流行的编程语言之一 凭借其简单易学的语法 Python 是初学者和经验丰富的开发人员的绝佳选择 Python 是一种非常通用的编程语言 它可以用作脚本语言来构建游戏 开发网站 创建机器学习算法和分析数据 Python
  • 如何在 CentOS 7 上安装 VLC 媒体播放器

    VLC 是一种流行的开源多媒体播放器和流媒体服务器 它是跨平台的 几乎可以播放所有多媒体文件以及 DVD 音频 CD 和不同的流媒体协议 本教程介绍如何在 CentOS 7 上安装 VLC 媒体播放器 先决条件 您需要以以下身份登录具有 s
  • 如何在 Ubuntu 20.04 上安装和使用 FFmpeg

    FFmpeg 是一个用于处理多媒体文件的免费开源工具集合 它包含一组共享的音频和视频库 例如libavcodec libavformat和libavutil 使用 FFmpeg 您可以在各种视频和音频格式之间进行转换 设置采样率 捕获流音频
  • Linux 睡眠命令(暂停 Bash 脚本)

    sleep是一个命令行实用程序 允许您将调用进程挂起指定的时间 换句话说 sleep命令将下一个命令的执行暂停给定的秒数 The sleep该命令在 bash shell 脚本中使用时非常有用 例如 在重试失败的操作或在循环内时 在本教程中
  • 如何在 Ubuntu 18.04 上安装 CouchDB

    CouchDB 是由 Apache 软件基金会维护的免费开源容错 NoSQL 数据库 CouchDB 服务器将其数据存储在命名数据库中 其中包含以下文档JSON结构 每个文档由许多字段和附件组成 字段可以包括文本 数字 列表 布尔值等 它包
  • 如何在 Debian 10 上安装 Xrdp 服务器(远程桌面)

    Xrdp 是 Microsoft 远程桌面协议 RDP 的开源实现 允许您以图形方式控制远程系统 使用 RDP 您可以登录到远程计算机并创建真实的桌面会话 就像登录到本地计算机一样 本教程介绍如何在 Debian 10 Linux 上安装和
  • 如何使用SFTP命令传输文件

    SFTP SSH 文件传输协议 是一种安全文件协议 用于通过加密的 SSH 传输访问 管理和传输文件 与传统的相比FTPSFTP 提供 FTP 的所有功能 但更安全且更易于配置 Unlike SCPSFTP 仅支持文件传输 但允许您对远程文
  • 15+ yum update 命令示例

    Yum 是 Red Hat CentOS 和其他操作系统上使用的包管理器Linux 发行版使用 RPM 包管理器 Yum 用于安装 更新 删除或以其他方式操作这些 Linux 系统上安装的软件包 在本教程中 我们将介绍 yum update
  • Seaborn barplot 教程(以条形图可视化您的数据)

    数据可视化已成为与分析数据进行交流的重要阶段 通过数据可视化 数据科学家和业务分析师可以轻松地从大量数据中提取见解 Seaborn 是一种 Python 中的统计图形绘图和可视化库 允许数据分析师和数据科学专业人员呈现可视化 在本文中 我们
  • 15 个 Linux 读取命令示例

    The readLinux 中的命令允许您从标准输入或文件中读取输入 它允许您接收数据并将其分配给变量 本教程将指导您完成不同的选项read命令 目录 hide 1 读取用户的输入 2 从文件中读取输入 3 指定分隔符
  • 创建和使用动态 Laravel 子域路由

    许多网站为用户的个人资料或页面提供了一个自定义子域 因此用户可以通过 http username website com 访问他的个人资料 这要好得多 在这篇文章中 我们将了解如何高效地进行动态 Laravel 子域路由 配置DNS 要做到
  • 使用 Pandas read_html 函数读取 HTML 表格

    您可以使用read html直接从网站抓取 HTML 表格并将其转换为数据框 它简化了从网页提取数据的过程 The read html函数接受一个包含 URL 或指向 HTML 文件的文件路径的字符串 提取该 HTML 页面中包含的所有表
  • Python SQLite3教程(数据库编程)

    在本教程中 我们将使用 Python 以编程方式使用 SQLite3 数据库 一般来说 SQLite 是一种无服务器数据库 您可以在包括 Python 在内的几乎所有编程语言中使用它 无服务器意味着无需安装单独的服务器即可使用 SQLite
  • Linux iptables 防火墙简化示例

    在上一篇文章中 我们讨论了如何使用强化最佳实践保护 Linux 服务器 有人问我防火墙部分 里面简单介绍了iptables防火墙 今天我们就来详细讨论一下Linux iptables 防火墙以及如何使用出色的防火墙来保护您的服务器流量 目录
  • Bash For 循环:Linux 中的迭代指南

    Bash 中的 for 循环是重要的控制结构 用于脚本编写重复任务 它们提供多次执行一系列命令 循环范围 变量 命令输出等的能力 这个综合教程将带您了解在 Bash 中使用 for 循环的各种方法 从基本语法到更高级的主题 例如嵌套循环和动
  • 使用 Pandas read_parquet 读取 Parquet 文件

    The read parquet函数于Pandas允许您将 Parquet 文件读入数据框 它提供了从本地文件路径或 URL 读取 Parquet 文件的功能 它的多功能性还不止于此 该函数提供了几个额外的选项来加载和处理文件中的数据 目录
  • Shell 脚本编写第 4 部分 – 输入、输出和重定向

    在上一篇文章中 我们讨论了参数和选项详细 今天 我们将讨论 shell 脚本中的一些基本内容 即输入 输出和重定向 您可以通过两种方式显示 shell 脚本的输出 在屏幕上显示输出 将输出发送到文件 目录 hide 1 标准文件描述符 2
  • 使用 to_excel 将 Python Pandas DataFrame 导出到 Excel

    The to excel功能允许您导出PandasDataFrame 到 Excel 文件 这对每个数据科学家都非常有益 本教程将让您全面了解如何to excel函数的工作原理 以及如何自定义其行为以满足您的需求 目录 hide 1 基本语