使用 Pandas read_excel 读取 Excel 文件

2023-10-12

Pandas read_excel是一个函数蟒蛇熊猫库允许我们在 Python 中读取 Excel 文件并将其转换为数据框 object.

read_excel函数可以导入具有不同扩展名的Excel文件,例如.xls、.xlsx、.xlsm和.ods。

 

 

Pandas read_excel 可以做什么?

该功能提供了大量参数来定制您的数据读取。例如,您可以指定工作表名称、读取多个工作表、选择标题行、读取时跳过行或列、定义列的数据类型、转换任何列数据等等。

在本教程中,我们将深入探讨您可以使用read_excel函数在 Python pandas 中读取和操作 Excel 文件中的数据。

 

发动机参数

read_excel 函数中的engine 参数指定用于读取Excel 文件的引擎。选项包括“xlrd”、“openpyxl”、“odf”和“xlsb”。

“xlrd”支持旧式 Excel 文件 (.xls),openpyxl 支持较新的 Excel 文件格式 (.xlsx),“odf”支持 OpenDocument 格式 (.ods),“xlsb”支持二进制 Excel 格式。

如果您尝试在未安装所需引擎的情况下读取 Excel 文件,您将收到导入错误。
首先,你应该安装你需要的引擎,在我们的例子中,我们有一个(.xlsx)文件,所以我们需要安装 openpyxl。


pip install openpyxl  

如果您需要读取(.ods)文件,您应该安装odfpy:


pip install odfpy  

现在,让我们阅读我们的文件:


df = pd.read_excel('school_data.xlsx', engine='openpyxl')
print(df)
  

Output:


    Student_ID   Name   Grade  Score
0            1  Alice      10     85
1            2    Bob       9     92
2            3  Carol       8     78
...
  

 

阅读 Excel 工作表

在某些情况下,我们可能希望从包含多个工作表的 Excel 文件中读取单个工作表。为此,我们在 read_excel 函数中指定sheet_name 参数:


df = pd.read_excel('school_data.xlsx', sheet_name='Students')
print(df)
  

Output:


    Student_ID   Name   Grade  Score
0            1  Alice      10     85
1            2    Bob       9     92
2            3  Carol       8     78
...
  

在上面的示例中,我们从学校数据 Excel 文件中读取第一个工作表“学生”。

 

 

阅读多张纸

要从 Excel 文件读取多个工作表,请将工作表列表传递给sheet_name 参数。结果将是一个字典,其中键是工作表名称,值是数据帧。


all_sheets_df = pd.read_excel('school_data.xlsx', sheet_name=['Students', 'Teachers'])
print(all_sheets_df['Students'])
print(all_sheets_df['Teachers'])
  

Output:


Students DataFrame:

    Student_ID   Name   Grade  Score
0            1  Alice      10     85
1            2    Bob       9     92
2            3  Carol       8     78
...

   Teacher_ID    Name   Subject
0           1    Alex   English
1           2  Brenda      Math
2           3  Charles   Science
...
  

在这里,我们从学校数据 Excel 文件中读取了两张表“学生”和“教师”。

 

选择标头

默认情况下,pandas 假定第一行是标题。但是,我们可以使用“header”参数来指定组成标题的行:


df = pd.read_excel('school_data.xlsx', header=0)
print(df)
  

Output:


    Student_ID   Name   Grade  Score
0            1  Alice      10     85
1            2    Bob       9     92
2            3  Carol       8     78
...
  

在这里,我们指定header=0,这表明我们选择了第一行(Pandas 的索引为 0)作为标题行。

不带标题阅读

如果您希望第一行不被视为标题,可以设置 header=None。


df = pd.read_excel('school_data.xlsx', header=None) 
print(df)  

Output:


             0      1       2      3
    Student_ID   Name   Grade  Score
0            1  Alice      10     85
1            2    Bob       9     92
2            3  Carol       8     78
...
  

这意味着第一行将被视为数据行,而不是标题。

 

设置数据帧index_col

“index_col”参数允许我们指定用作 DataFrame 行标签的列。让我们将“Student_ID”列设置为索引:


df = pd.read_excel('school_data.xlsx', index_col='Student_ID')
print(df)
  

Output:


            Name   Grade  Score
Student_ID                     
1          Alice      10     85
2            Bob       9     92
3          Carol       8     78
...
  

在此示例中,我们将“Student_ID”设置为 DataFrame 的索引,它现在用作行标签。

 

跳行

您可以使用skiprows参数在读取Excel文件时跳过行。您可以传递一个整数来从顶部跳过一定数量的行,或者传递一个行索引列表来跳过特定行:


df = pd.read_excel('school_data.xlsx', skiprows=1)
print(df)
  

Output:


    1  Alice   10  85
0   2    Bob    9  92
1   3  Carol    8  78
...
  

在本例中,我们通过设置跳过了 DataFrame 的第一行skiprows=1。因此,以前的第二行现在被视为标题行。


df = pd.read_excel('school_data.xlsx',skiprows=[1,3])
print(df)  
在上面的代码中,第一行和第三行被跳过。

 

有条件跳过

Skiprows 参数还接受一个可调用函数,允许基于条件的行跳过。

该函数根据行索引进行计算,并且函数返回 True 的行将被跳过:


# Function to skip even rows
skip_func = lambda x: x % 2 == 0

df = pd.read_excel('school_data.xlsx', skiprows=skip_func)
print(df)
  

Output:


   Student_ID   Name  Grade  Score
0           1  Alice     10     85
1           3  Carol      8     78
...
  

我们通过定义一个函数跳过了每个偶数行skip_func如果行索引为偶数,则返回 True。

 

限制读取的行数

当您想要从 Excel 文件中读取一定数量的行时,可以使用 nrows 参数。例如,仅读取前五行:


df = pd.read_excel('school_data.xlsx', nrows=5)
print(df)
  

Output:


   Student_ID   Name  Grade  Score
0           1  Alice     10     85
1           2    Bob      9     92
2           3  Carol      8     78
3           4  David     10     88
4           5  Emily      9     81
  

通过设置nrows=5,我们将 DataFrame 限制为仅包含 Excel 数据的前五行。

 

提取特定列(跳过列)

如果您对 Excel 文件中的特定列感兴趣,可以使用 usecols 参数。这可以是列名称列表或为要解析的列返回 True 的可调用函数:


df = pd.read_excel('school_data.xlsx', usecols=['Name', 'Score'])
print(df)
  

Output:


    Name  Score
0  Alice     85
1    Bob     92
2  Carol     78
...
  

在本例中,我们仅从 Excel 文件中读取“名称”和“分数”列。如果您正在处理大型数据集并且只需要列的子集,这可以节省大量内存。

另外,您可以将函数传递给 usecols,如下所示:


def column_filter(col_name):
    return col_name.startswith('S')

df = pd.read_excel('school_data.xlsx', usecols=column_filter)  

Output:


   Student_ID  Score
0           1     85
1           2     92
2           3     78
...
  

在这里,我们只返回以“S”字符开头的列。

 

控制数据类型

默认情况下,Pandas 尝试推断每列的最佳数据类型。但有时,您可能想要强制执行特定类型,这可以使用“dtype”参数来完成。

这可以是单个类型或将列名映射到数据类型的字典:


df = pd.read_excel('school_data.xlsx', dtype={'Score': 'int'})
print(df.dtypes)
  

Output:


Student_ID     int64
Name          object
Grade          int64
Score          int32
dtype: object
  

在这里,我们指定“Score”列应被视为整数 (int32)。生成的 DataFrame 验证此数据类型。

 

处理布尔数据

有时,Excel 文件可能包含表示为非标准值(例如“是/否”或“Y/N”)的布尔数据。

“true_values”和“false_values”参数允许您指定哪些值应被视为 True 或 False:


df = pd.read_excel('school_data.xlsx', true_values=['Y'], false_values=['N'])
print(df)
  

Output:


   Student_ID   Name  Grade  Score  Passed
0           1  Alice     10     85    True
1           2    Bob      9     92    True
2           3  Carol      8     78   False
...
  

在上面的示例中,“Passed”列中的“Y”被解释为 True,“N”被解释为 False。

 

转换器参数

Converters 参数允许您在导入过程中将函数应用于特定列。这对于在加载数据时对其执行转换非常有用:


# Function to capitalize names
capitalize = lambda x: x.capitalize()

df = pd.read_excel('school_data.xlsx', converters={'Name': capitalize})
print(df)
  

Output:


   Student_ID   Name  Grade  Score
0           1  Alice     10     85
1           2    Bob      9     92
2           3  Carol      8     78
...
  

在这里,由于应用了“大写”功能,“名称”列值在导入过程中被大写。

 

解析日期列

‘parse_dates’参数有助于将类似日期的数据转换为日期时间对象:


df = pd.read_excel('school_data.xlsx', parse_dates=['DOB'])
print(df.dtypes)
  

Output:


Student_ID             int64
Name                  object
Grade                  int64
DOB           datetime64[ns]
dtype: object
  

在此示例中,我们将“DOB”列解析为日期时间对象。这在某些情况下非常有用,例如在两个日期之间搜索或查找日期大于或小于特定日期的行。

 

处理非美国日期格式

Pandas’ read_excel解析日期时,函数默认使用美国日期格式 (mm/dd/yyyy)。但是,您可能会遇到日期采用非美国格式(例如 dd/mm/yyyy)的 Excel 文件。
为了正确解析非美国日期格式,我们必须首先将日期加载为字符串类型,然后使用pd.to_datetime具有正确的格式:


df = pd.read_excel('students.xlsx', dtype={'Enrollment Date': str})
df['Enrollment Date'] = pd.to_datetime(df['Enrollment Date'], format='%d/%m/%Y')
print(df['Enrollment Date'])
  

Output:


0   2022-09-01
1   2022-09-02
2   2022-09-03
3   2022-09-04
Name: Enrollment Date, dtype: datetime64[ns]
  

在此示例中,加载数据后,“注册日期”被正确解析为“dd/mm/yyyy”格式的日期列。

 

处理 NaN 值

默认情况下,read_excel 函数将空单元格解释为 NaN。但是,如果您的单元格包含另一个值而不是空值,会发生什么情况?

您可以使用“na_values”参数指定 Pandas 如何处理缺失值或 NaN 的单元格:


df = pd.read_excel('school_data.xlsx', na_values='N/A')
print(df)
  

Output:


   Student_ID   Name  Grade  Score
0           1  Alice     10   85.0
1           2    Bob      9   92.0
2           3  Carol      8    NaN
...
  

在此示例中,只要在 Excel 数据中找到“N/A”,它就会被 DataFrame 中的 NaN 值替换。

这些只是“pandas read_excel”函数提供的众多强大功能中的一小部分。

每个参数都可以让您更好地控制如何将数据从 Excel 文件导入到 pandas DataFrame 中。

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

使用 Pandas read_excel 读取 Excel 文件 的相关文章

  • 如何以“正确”的方式处理带有空字节的 Python unicode 字符串?

    Question PyWin32 似乎很乐意将 null 终止的 unicode 字符串作为返回值 我想以 正确 的方式处理这些字符串 假设我得到一个像这样的字符串 u C Users Guest MyFile asy x00 x00sy
  • 如何检查python xlrd库中的excel文件是否有效

    有什么办法与xlrd库来检查您使用的文件是否是有效的 Excel 文件 我知道还有其他库可以检查文件头 我可以使用文件扩展名检查 但为了多平台性我想知道是否有任何我可以使用的功能xlrd库本身在尝试打开文件时可能会返回类似 false 的内
  • Python 2.7 中的断言对我来说不起作用示例assertIn

    我的 Mac 上安装了 python 2 7 通过在终端中运行 python v 进行验证 当我尝试使用任何新的 2 7 断言方法时 我收到 AtributeError 我看过http docs python org 2 library u
  • 如果未引发异常,则通过 Python 单元测试

    在Python中unittest框架 是否有一种方法可以在未引发异常的情况下通过单元测试 否则会因 AssertRaise 而失败 如果我正确理解你的问题 你could做这样的事情 def test does not raise on va
  • 搜索多个字段

    我想我没有正确理解 django haystack 我有一个包含多个字段的数据模型 我希望搜索其中两个字段 class UserProfile models Model user models ForeignKey User unique
  • Gspread如何复制sheet

    在 Stackoverflow 上进行谷歌搜索和搜索后 我想我找不到有关如何复制现有工作表 现有模板工作表 并将其保存到另一个工作表中的指南 根据文档 有重复表 https gspread readthedocs io en latest
  • .pyx 文件出现未知文件类型错误

    我正在尝试构建一个包含 pyx 文件的 Python 包 pyregion 但在构建过程中出现错误 检查以下输出 python setup py build running build running build py creating b
  • 使用 python 绘制正值小提琴图

    我发现小提琴图信息丰富且有用 我使用 python 库 seaborn 然而 当应用于正值时 它们几乎总是在低端显示负值 我发现这确实具有误导性 尤其是在处理现实数据集时 在seaborn的官方文档中https seaborn pydata
  • SMTP_SSL SSLError: [SSL: UNKNOWN_PROTOCOL] 未知协议 (_ssl.c:590)

    此问题与 smtplib 的 SMTP SSL 连接有关 当与 SMTP 无 ssl 连接时 它正在工作 在 SMTP SSL 中尝试相同的主机和端口时 出现错误 该错误仅基于主机 gmail 设置也工作正常 请检查下面的示例 如果 Out
  • 使用“默认”环境变量启动新的子进程

    我正在编写一个构建脚本来解析依赖的共享库 及其共享库等 这些共享库在正常情况下是不存在的PATH环境变量 为了使构建过程正常工作 让编译器找到这些库 PATH已更改为包含这些库的目录 构建过程是这样的 加载器脚本 更改 PATH gt 基于
  • Mac OSX 10.6 上的 Python mysqldb 不工作

    我正在使用 Python 2 7 并尝试让 Django 项目在 MySQL 后端运行 我已经下载了 mysqldb 并按照此处的指南进行操作 http cd34 com blog programming python mysql pyth
  • 动态过滤 pandas 数据框

    我正在尝试使用三列的阈值来过滤 pandas 数据框 import pandas as pd df pd DataFrame A 6 2 10 5 3 B 2 5 3 2 6 C 5 2 1 8 2 df df loc df A gt 0
  • 当数据库不是 Django 模型时,是否可以使用数据库中的表?

    是否可以从应用程序数据库中的表获取查询集 该表不是应用程序中的模型 如果我有一个不是名为 cartable 的模型的表 从概念上讲 我想这样做 myqueryset cartable objects all 有没有相对简单的方法来做到这一点
  • 混淆矩阵不支持多标签指示符

    multilabel indicator is not supported是我在尝试运行时收到的错误消息 confusion matrix y test predictions y test is a DataFrame其形状为 Horse
  • Django 与谷歌图表

    我试图让谷歌图表显示在我的页面上 但我不知道如何将值从 django 视图传递到 javascript 以便我可以绘制图表 姜戈代码 array Year Sales Expenses 2004 1000 400 2005 1170 460
  • TKinter 中的禁用/启用按钮

    我正在尝试制作一个像开关一样的按钮 所以如果我单击禁用按钮 它将禁用 按钮 有效 如果我再次按下它 它将再次启用它 我尝试了 if else 之类的东西 但没有成功 这是一个例子 from tkinter import fenster Tk
  • 从 pandas DataFrame 中删除少于 K 个连续 NaN

    我正在处理时间序列数据 我在从数据帧列中删除小于或等于阈值的连续 NaN 时遇到问题 我尝试查看一些链接 例如 标识连续 NaN 出现的位置以及计数 Pandas NaN 孔的游程长度 https stackoverflow com que
  • 将上下文管理器的动态可迭代链接到单个 with 语句

    我有一堆想要链接的上下文管理器 第一眼看上去 contextlib nested看起来是一个合适的解决方案 但是 此方法在文档中被标记为已弃用 该文档还指出最新的with声明直接允许这样做 自 2 7 版起已弃用 with 语句现在支持此
  • 使用ssl和socket的python客户端身份验证

    我有一个 python 服务器 需要客户端使用证书进行身份验证 我如何制作一个客户端脚本 使用客户端证书由 python 中的服务器使用 ssl 和套接字模块进行身份验证 有没有仅使用套接字和 ssl 而不扭曲的示例 from OpenSS
  • 查找总和为给定数字的值组合的函数

    这个帖子查找提供的 Sum 值的组合 https stackoverflow com a 20194023 1561176呈现函数subsets with sum 它在数组中查找总和等于给定值的值的组合 但由于这个帖子已经有6年多了 我发这

随机推荐

  • Python 中的字典

    目录 定义字典 访问字典值 字典键与列表索引 增量构建字典 字典键的限制 对字典值的限制 运算符和内置函数 Built in Dictionary Methods d clear d get d items d keys d values
  • 纯Python直方图

    当您准备绘制直方图时 最简单的方法是不要考虑箱 而是报告每个值出现的次数 频率表 一条蟒蛇字典非常适合这项任务 gt gt gt gt gt gt Need not be sorted necessarily gt gt gt a 0 1
  • 了解日期和时间是混乱的

    日期和时间并不是简单的事情 尤其是现在大多数计算都是远程完成的 无法保证计算机和用户位于同一个地方 由于管理夏令时和时区的规则不是静态的 这一事实使情况变得更加复杂 在本课程中 您将探索所有奇怪的边缘情况 并了解程序员通常如何处理它们
  • 掌握Python的内置时间模块

    蟒蛇time模块提供了多种方式代表时间代码中 例如对象 数字和字符串 它还提供除表示时间之外的功能 例如在代码执行期间等待和测量代码的效率 本课程将引导您了解最常用的函数和对象time 完成本课程后 您将能够 理解处理日期和时间的核心概念
  • 关于奥尔德伦·桑托斯

    关于奥尔德伦 桑托斯 个人网站 大家好 我是 Aldren Santos 担任自由平面设计师 插画师已有 3 年了 我的任务是尽我所能 让这个网站变得更加精彩 我真心希望我的插图能够吸引您通过我们团队辛勤工作的这些教程学习 Python 的
  • 编写和测试 Python 函数:面试练习(概述)

    无论您是想在编码面试中取得好成绩 还是只是想提高您的开发技能 解决编码挑战可以帮助您成长为一名程序员 在这个真实的 Python 代码对话中 Philipp 向 Martin 提出挑战 要求他编写一个函数 将字符串中的每个字符加倍 通过他们
  • 引导 Django 项目

    有关本课程所涵盖概念的更多信息 您可以查看 如何设置 Django 项目 真正的Python文章 使用 Django 和 Python 构建个人日记 真正的Python文章 以下是本课程中使用的命令行片段 mkdir portfolio p
  • Python 石头剪刀布:命令行游戏(概述)

    游戏编程是学习如何编程的好方法 您可以使用许多在现实世界中看到的工具 此外您还可以玩游戏来测试您的结果 开始 Python 游戏编程之旅的理想游戏是剪刀石头布 在本课程中 您将学习如何 自己编写代码剪刀石头布游戏 接受用户输入input 使
  • 2021 年 4 月 21 日

    主持人大卫 阿莫斯回答会员的问题 在这次会议上 我们讨论了 Real Python 的新功能 在哪里可以找到要阅读的代码以提高您的 Python 技能 为什么 0xfor x in 1 2 3 回报 15 数据科学 Django 和 Fla
  • Python 中的 K 均值聚类:实用指南

    目录 What Is Clustering 聚类技术概述 分区聚类 层次聚类 基于密度的聚类 How to Perform K Means Clustering in Python 了解 K 均值算法 使用 Python 编写您的第一个 K
  • 在 Python 中使用 lru_cache 进行缓存

    有很多方法可以实现快速响应的应用程序 缓存是一种方法 如果使用得当 可以使事情变得更快 同时减少计算资源的负载 蟒蛇的功能工具模块附带 lru cache 装饰器 这使您能够使用以下命令缓存函数的结果最近最少使用 LRU 策略 这是一种简单
  • 拼写错误、缺失或误用 Python 关键字

    以下是有关 Python 关键字的更多信息的资源 Python 关键字 简介 真正的 Python 文章 Python 3 8 关键字 Python 文档
  • Python 标准 REPL:快速尝试代码和想法

    目录 Getting to Know the Python Standard REPL 什么是 Python 的交互式 Shell 或 REPL 为什么使用 Python REPL Starting and Ending REPL Inte
  • 使用 Fabric 和 Ansible 自动化 Django 部署

    目录 设置和配置 Fabric Setup 设置 SSH 密钥 强化用户密码 安装 Ansible 依赖项 将 SELinux 设置为宽容模式 升级服务器 完整性检查 Ansible Primer 剧本 示例手册 Playbook Setu
  • 第 27 集:准备面试 Python 练习题

    第 27 集 准备面试 Python 练习题 真正的 Python 播客 2020 年 9 月 18 日47m RSS Apple Podcasts Google Podcasts Spotify More 播客瘾君子 灰蒙蒙 袖珍铸件 投
  • Python 基础知识:函数和循环(摘要)

    在本视频课程中 您了解了两个最基本的概念 在编程中 函数和循环 首先 您学习了如何定义自己的自定义函数 你看到了 该函数由两部分组成 这函数签名 这开始于def关键字并包括函数名称和函数参数 这函数体 其中包含每当调用该函数时运行的代码 函
  • Python 的 urllib.request 用于 HTTP 请求

    目录 使用 urllib request 的基本 HTTP GET 请求 The Nuts and Bolts of HTTP Messages 了解什么是 HTTP 消息 了解 urllib request 如何表示 HTTP 消息 关闭
  • Django Ninja 的隐蔽 REST API(摘要)

    在本课程中 您已经了解了 Django Ninja REST API 库的所有内容 使用 Ninja 您可以 使用装饰器快速包装 Django 视图创建 REST API 端点 使用类型注释定义变量和参数 写Schema和ModelSche
  • Python 中的 Dijkstra 算法(查找最短路径)

    Dijkstra算法的工作原理是通过迭代找到节点的最短距离值 直到达到实际的最短距离 Dijkstra 算法的一个关键方面是它使用优先队列从尚未处理的节点集中选择具有最小暂定距离的顶点 当前节点被标记为已访问 并检查其所有邻居节点是否有更优
  • 使用 Pandas read_excel 读取 Excel 文件

    Pandas read excel是一个函数蟒蛇熊猫库允许我们在 Python 中读取 Excel 文件并将其转换为数据框 object read excel函数可以导入具有不同扩展名的Excel文件 例如 xls xlsx xlsm和 o