如何用Pandas读和写Excel文件

79 阅读8分钟

我们在Pandas中用于现实世界项目的数据经常来自于外部资源。一个流行的和重复使用的来源是Excel。在本教程中,我们将学习如何从Excel中读取文件,如何修改这些文件,以及如何将它们写入Excel中。我们将使用几个Pandas函数来实现这些方法。

将Excel表读入Pandas数据框

为了将数据从Excel工作表中读入潘达斯数据框架,我们使用Pandas的read_excel() 函数。这个函数为我们提供了广泛的参数,以各种方式读入我们的数据。

让我们从一个简单的例子开始。我们使用的Excel数据看起来像这样。

该数据集包含虚构的人物及其各自的姓名、性别、工作和年龄。我们可以看到,没有额外的索引,只有Excel为我们提供的索引(左边的行号)。现在我们移到我们的代码编辑器,在那里读入数据集。

import pandas as pd

df = pd.read_excel("excel_file.xlsx")

DataFrame看起来像这样。

姓名性别工作年龄
0爱丽丝f经理31
1约翰m软件工程师28
2鲍勃m农民43
3Tracyf医生40

首先,我们导入Pandas库。然后我们使用函数read_excel()创建一个数据框,并将其分配给变量"df"。在这个函数中,我们把Excel文件的名称作为一个字符串输入。最后,我们输出该数据框。请注意,为了使它像这样工作,Pandas脚本和Excel文件必须在同一个文件夹中。如果不是这样,我们必须输入Excel文件所在的文件路径。

如前所述,我们有很多参数可以在read_excel() 函数里面使用。其中一个是 "dtype" 参数,它允许我们在导入时指定一个列的数据类型。例如,我们可以指定 "age" 列的数据类型为 "[float](https://blog.finxter.com/python-float-function/ "Python float() Function")".我们这样做。

df = pd.read_excel("excel_file.xlsx", dtype={"age": float})

这就导致了以下的结果:

名称性别工作年龄
0爱丽丝f经理31.0
1约翰m软件工程师28.0
2鲍勃m农夫43.0
3Tracyf医生40.0

我们给 "dtype "参数分配了一个包含所有列数据类型的字典,我们想要指定。我们传入列的名字作为键,传入所需的数据类型作为字典的值。正如我们在输出中所看到的,数据类型确实变成了float,因为所有的 "age "值现在都有一个".0 "在后面。为了100%确定数据类型是 "float",我们可以这样检查。

>>> df["age"].dtype
dtype('float64')

"age" 列的数据类型是 "float64" 。

Excel文件包含两个表,即 "表1"和 "表2"。

默认情况下,read_excel() 函数会选择第一个表,其中包含我们上面看到的数据集。使用 "sheet_name" 参数,我们可以指定我们要选择的表。所以现在,让我们用 "表2"的数据集创建第二个数据框。这就是Excel文件中的数据集的样子。

现在我们应用 "sheet_name" 参数读入另一个数据框。

df2 = pd.read_excel("excel_file.xlsx", sheet_name="Table 2")
未命名:0动物食物栖息地
01狗粮土地
12海龟海藻
23海豚鱼类
34老鹰老鼠

我们把我们要访问的表的名称作为一个字符串分配给 "sheet_name" 参数。但是那第二列是什么呢?Pandas创建了一个额外的列,叫做 "Unnamed: 0"。请注意,这个数据集在Excel文件中的第一列有自己的索引,而不像第一个数据集那样没有自己的索引。我们可以使用 "index_col" 参数来解决这个问题。这里我们指定用于行标签的列。当我们的数据集有自己的索引时,我们指定这个参数。

df2 = pd.read_excel("excel_file.xlsx", sheet_name="Table 2", 
                    index_col=0)

动物食物栖息地
1狗粮土地
2海龟海藻
3海豚鱼类
4老鹰老鼠

我们给 "index_col "参数加上 "0",告诉程序我们要用数据集的第一行作为数据框的索引。

用Pandas修改导入的文件

在我们导入Excel表格并从中创建新的数据框架后,我们可以用Pandas分析和修改我们的数据框架。这一步对于本教程来说并不重要。然而,我们还是要走这一步,只是为了让你了解读取Excel表、修改数据、并将修改后的数据写回Excel表的整个工作流程。

这里有无尽的机会,但我们将保持简单,只改变一件事。让我们来看看我们首先使用的数据框架。

这就是我们的基本数据框架,名为df ,看起来是这样的:

姓名性别工作年龄
0爱丽丝f经理31.0
1约翰m软件工程师28.0
2鲍勃m农夫43.0
3Tracyf医生40.0

现在,我们修改数据框,删除 "性别 "列。

df3 = df.drop(columns=["gender"])
姓名工作年龄
0爱丽丝经理31.0
1约翰软件工程师28.0
2鲍勃农夫43.0
3特雷西医生40.0

我们通过应用drop() 函数摆脱了 "gender" 列。在该函数中,我们将列 "gender" 作为一个列表分配给 "columns" 参数,以说明我们要删除的列。输出的数据框显示了没有 "gender" 列的初始数据框。

现在我们对数据框做了一些改变。在下一步,我们将看到如何将这个新的数据框架写入Excel工作表。

将对象写入Excel工作表

当我们在Pandas中完成了数据分析并修改了我们的数据框架后,我们要把这些数据框架写到Excel表格中,以使它们更好地被使用和可见。这就是to_excel()函数发挥作用的地方。

df3.to_excel("new_excel_file.xlsx")

我们选择要输出到Excel表格中的数据框架。我们使用在上一段中创建的 "df3" 。在to_excel() 函数中,我们将文件名("new_excel_file")和文件扩展名(".xlsx")作为一个字符串输入。请注意,我们在这里没有得到一个输出。相反,一个新的文件被创建,并被存储在与Pandas脚本相同的文件夹中。这就是文件的样子。

我们可以看到,这里有两种不同类型的索引。A "列中的索引和 "A "列左边的Excel索引。列 "A "中的额外索引是多余的,我们想去掉它们,所以我们通过使用 "索引 "参数对to_excel() 函数进行了一些修改。

df3.to_excel("new_excel_file.xlsx", index=False)

我们给 "index"参数赋值 "False",以说明我们不想使用潘达的索引。现在的Excel文件看起来是这样的。

除此之外,我们可以通过应用 "sheet_name" 参数来指定工作表的名称。

df3.to_excel("new_excel_file.xlsx", index=False, sheet_name="Table 1")

我们把这个工作表称为 "表1"。在文件的底部,我们可以看到新的工作表名称。

将多个对象写入Excel文件

我们已经看到了如何使用to_excel() 函数将一个数据框架写到Excel文件中。使用这种方法只允许我们写一个对象,但我们可能想写多个对象到Excel。因此,我们使用ExcelWriter 对象。ExcelWriter 是一个用于将数据帧写入Excel表格的类。让我们从一个例子开始,将两个数据框架写入一个新的Excel工作表中。我们使用上面的数据框 "df2" 和 "df3" 。

with pd.ExcelWriter("new_file_2.xlsx") as writer:
    df2.to_excel(writer, sheet_name="Table 1", index=False)
    df3.to_excel(writer, sheet_name="Table 2", index=False)

with 语句是用于异常处理的 Python 语句,使我们的代码更容易阅读。这里的代码说,在第一行我们使用 ExcelWriter 创建一个新的 Excel 文件 ("new_file_2.xlsx") 并将其分配给一个叫做 "writer"的变量。在之后插入的两行中,我们使用我们已经知道的to_excel() 函数将两个数据框架写入新创建的Excel文件中。在to_excel() 函数中,我们分别放入变量 "writer" 作为路径。我们还使用 "sheet_name" 参数和各自的工作表名称,并将 "index" 参数设置为 "False" 以摆脱额外的索引。这就是新文件中第一个工作表在Excel中的样子。

这是第二个工作表。

ExcelWriter也允许我们追加到一个现有的Excel文件中。我们将看到如何通过在新的工作表 "表3"中将我们一开始使用的数据框 "df"追加到现有文件 "new_file_2.xslx"中。

with pd.ExcelWriter("new_file_2.xlsx", mode="a") as writer:
    df.to_excel(writer, sheet_name="Table 3", index=False)

与之前的例子相比,代码只有一个真正的区别。我们只在ExcelWriter 内添加了参数 "mode" ,并给它分配了代表 "附加 "的字符串"a" 。因此,在这里,我们将数据框 "df" 附加到现有的Excel文件中,并将其存储在一个名为 "表3"的新工作表中。这就是表3中的数据框的样子。

正如你所看到的,我们在这个文件中确实有三个工作表。

总结

综上所述,可以说,在使用Pandas时,正确处理Excel文件是非常重要的。我们要分析的数据集往往来自于Excel工作表,当我们完成分析后,修改后的数据集往往要写回Excel工作表,以使数据更容易访问。使用Pandas为我们提供的显示的Excel函数,使这些过程对我们来说相当简单,它们帮助我们在处理Excel文件时提供了一个良好而清晰的工作流程。