我们在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 |
3 | Tracy | f | 医生 | 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 |
3 | Tracy | f | 医生 | 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 | 动物 | 食物 | 栖息地 | |
0 | 1 | 狗 | 狗粮 | 土地 |
1 | 2 | 海龟 | 海藻 | 海 |
2 | 3 | 海豚 | 鱼类 | 海 |
3 | 4 | 老鹰 | 老鼠 | 天 |
我们把我们要访问的表的名称作为一个字符串分配给 "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 |
3 | Tracy | f | 医生 | 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文件时提供了一个良好而清晰的工作流程。