12. Pandas :使用pandas读Excel文件的常用方法

server/2025/3/15 14:06:25/

一 read_excel 函数

其他参数根据实际需要进行查找。

1.接受一个工作表

在 11 案例用到的 Excel 工作簿中,数据是从第一张工作表的 A1 单元格开始的。但在实际场景中, Excel 文件可能并没有这么规整。所以 panda 提供了一些参数来优化读取过程。

比如 store.xlsx 文件的三个工作表都是这样:

通过 sheet_name、skiprows 和 usecols 这些参数,可以告诉 pandas 关于我们想要读取的列的详细信息。

sheet_name="2019":指定了要读取的工作表名称。sheet_name 接受工作表切片。闭区间,包括起始和结束的工作表。

  • 单个工作表: sheet_name="Sheet1"
  • 多个工作表(列表): sheet_name=["Sheet1", "Sheet2"]
  • 工作表切片: sheet_name="Sheet1:Sheet3" 或 sheet_name=0:3(使用索引)

skiprows=1:用于跳过文件开头指定数量的行。在这个例子中,skiprows=1 表示跳过文件的第一行,从第二行开始读取数据。

usecols="B:F":用于指定要读取的列范围。读取从列 B 到列 F 的数据(包括 B 和 F 列)。

补充:Flagship 的数据类型应该是 bool 而不是 object。要修正这一问题,需要提供一个转换函数来处理某列中发生冲突的单元格。(编写 fix_missing 函数或者写一个lambda 表达式)

将 Flagship 列中的非布尔值处理为 False,而将有效的布尔值保留为 True 或 False

Flagship 列的数据类型是 object,而不是 bool。是因为该列中包含了一些非布尔值(如 MISSING 和 NaN),导致 pandas 无法自动将其转换为布尔类型。

1.编写函数

python">import pandas as pd
import numpy as np# 定义 fix_missing 函数
def fix_missing(value):if isinstance(value, bool):return valueelse:return False# 读取数据
df = pd.read_excel("xl/stores.xlsx", sheet_name="2019", skiprows=1, usecols="B:F")# 应用 fix_missing 函数到 Flagship 列
df['Flagship'] = df['Flagship'].apply(fix_missing)# 打印修正后的 DataFrame
print(df)

2.使用 lambda 表达式

python">import pandas as pd# 读取数据
df = pd.read_excel("xl/stores.xlsx", sheet_name="2019", skiprows=1, usecols="B:F")# 使用 lambda 表达式将 Flagship 列中非布尔值转换为 False
df['Flagship'] = df['Flagship'].apply(lambda x: x if isinstance(x, bool) else False)# 打印修正后的 DataFrame
print(df)

apply() 方法用于对 DataFrame 的每一列应用一个函数。

lambda x: x if isinstance(x, bool) else False 是一个匿名函数,它检查每个元素 x

如果 x 是布尔类型(True 或 False),则保留原值。如果 x 不是布尔类型(例如,MISSING 或 NaN),则将其转换为 False

isinstance(x, bool) 是一个内置函数,用于检查变量 x 是否是布尔类型 (bool)。

3.结合使用

converters 参数用于指定列的自定义转换函数。这允许你在数据读取过程中,对特定列的数据进行预处理或转换。converters 是一个字典,其中键是列名(或列索引),值是应用于该列的转换函数。当 pandas.read_excel 读取数据时,会使用这些转换函数来处理指定列的数据。

python">def fix_missing(x):return False if x in ["", "MISSING"] else xdf = pd.read_excel("xl/stores.xlsx",sheet_name="2019",skiprows=1,usecols="B:F",converters={"Flagship": fix_missing})

fix_missing 函数:这个函数用于检查传入的值 x

如果 x 是一个空字符串 "" 或字符串 "MISSING",则返回 False。否则,返回原始值 x

converters={"Flagship": fix_missing}:

这里指定了一个转换字典,其中键是 "Flagship",表示要对 Flagship 列应用转换。值是 fix_missing 函数,这意味着在读取 Flagship 列的数据时,每个单元格的值都会通过 fix_missing 函数进行处理。

2.接受一个工作表名称列表

在 pandas 库中,read_excel 函数可以读取 Excel 文件中的一个或多个工作表。当你想要读取多个工作表时,可以通过传递一个工作表名称的列表或者使用 sheet_name=None 来读取所有的工作表。这将返回一个字典,其中键是工作表名称,值是对应的 DataFrame

假设你有一个 Excel 文件 data.xlsx,其中包含以下三个工作表:

Sheet1: 包含学生基本信息。

Sheet2: 包含学生的成绩。

Sheet3: 包含学生的出勤记录。

python">import pandas as pd# 读取 Excel 文件中的所有工作表
sheets = pd.read_excel("data.xlsx", sheet_name=None)# `sheets` 是一个字典,键是工作表名称,值是对应的 DataFrame
print(sheets.keys())  # 输出: dict_keys(['Sheet1', 'Sheet2', 'Sheet3'])# 访问特定工作表的 DataFrame
students_info = sheets['Sheet1']
students_grades = sheets['Sheet2']
students_attendance = sheets['Sheet3']# 打印 Sheet1 的数据
print(students_info)

补充:usecols 参数。

用于指定要读取的列名,从而只导入你感兴趣的数据,忽略其他列。

python">import pandas as pd# 读取 Excel 文件中的两个工作表 "2019" 和 "2020"
sheets = pd.read_excel("xl/stores.xlsx", sheet_name=["2019", "2020"], skiprows=1, usecols=["Store", "Employees"])# 打印 2019 年工作表的前两行
print(sheets["2019"].head(2))

 .head(2) 方法打印该 DataFrame 的前两行。

3.设置列名

源文件没有列标题,可以设置参数 header=None 并通过 names 参数提供对应的列名。

python">import pandas as pddf = pd.read_excel("xl/stores.xlsx", sheet_name=0, skiprows=2, skipfooter=3, usecols="B:C,F", header=None, names=["Branch", "Employee_Count", "Is_Flagship"]
)

sheet_name=0:指定读取 Excel 文件的第一个工作表。

skiprows=2:跳过文件开头的 2 行。

skipfooter=3:跳过文件末尾的 3 行。

usecols="B:C,F":指定要读取的列。"B:C" 表示读取从 B 列到 C 列的所有列(包括 B 和 C 列)。"F" 表示读取 F 列。

header=None:指定 Excel 文件中没有列标题行。规定不要将文件中的任何一行用作列名。

names=["Branch", "Employee_Count", "Is_Flagship"]:由于 header=None,我们需要通过 names 参数提供自定义的列名。

这里为读取的列指定了名称:"Branch""Employee_Count" 和 "Is_Flagship"

4.处理缺失值

使用 na_values 和 keep_default_na 参数。

python">import pandas as pddf = pd.read_excel("xl/stores.xlsx", sheet_name="2019", skiprows=1, usecols="B,C,F", skipfooter=2, na_values="MISSING", keep_default_na=False
)

na_values="MISSING":指定将 "MISSING" 视为缺失值(NaN)。任何在数据中出现的 "MISSING" 都会被转换为 NaN

keep_default_na=False:指定不保留 pandas 默认的缺失值标识符。默认情况下,pandas 会将空字符串 ""'nan''null''NULL' 等识别为缺失值并转换为 NaN。设置为 False 后,只有 na_values 中指定的值(如 "MISSING") 会被视为缺失值。


二 ExcelFile 类 

1.什么是 ExcelFile 类 

使用 ExcelFile 类,你可以一次性加载整个 Excel 文件,然后根据需要选择性地解析各个工作表,从而提高数据处理的效率。

2.为什么有 ExcelFile 类 

当需要从同一个 Excel 文件中读取多个工作表时,直接使用 read_excel 函数可能会多次打开和读取整个文件,导致性能下降。而 ExcelFile 类允许你一次性打开文件,并在内存中保持打开状态,从而避免了重复的文件读取操作。

ExcelFile 类可以被用作上下文管理器(使用 with 语句),这意味着文件会在使用后被自动关闭,从而避免了资源泄漏的问题。当使用 with 语句来打开 ExcelFile 时,pandas 会自动处理文件的打开和关闭。

3.如何使用 ExcelFile 类 

1.导入 pandas

import pandas as pd

2.创建 ExcelFile 对象

传入 Excel 文件的路径。

补充:通过 ExcelFile 访问所有工作表的名称

3.读取工作表

使用 pd.read_excel 函数读取 ExcelFile 对象中的特定工作表。

4.(可选)使用上下文管理器

为了确保文件在使用后被正确关闭,可以使用 with 语句来管理 ExcelFile 对象。

补充:上下文管理器和 with 语句 

Python 中的 with 语句被用于管理文件或数据连接之类的资源。如果你想加载最新的销售数据以便对其进行分析,就必须打开一个文件或者建立一个数据库连接。在数据读取完成后,最好尽快关闭文件或者数据库连接。否则,你可能会无法打开其他文件或者建立新的数据库连接。

手动打开和关闭文本文件的代码:

执行这段代码会在笔记本的工作目录中创建一个叫作 output.txt 的文件,并将“Some text”

写入文件。要读取一个文件,需要使用 r 模式而不是 w 模式;要在文件末尾追加内容,则需要使用 a 模式。

文件的打开和关闭是一种相当常见的操作,因此 Python 提供了 with 语句来简化这类代码:

当代码的执行过程离开 with 语句的主体时,无论是否发生异常,文件都会被自动关闭。支持 with 语句的对象被称作上下文管理器。ExcelFile 对象和 ExcelWriter 对象,数据库连接对象都是上下文管理器。

5.示例

pd.ExcelFile("xl/stores.xls"): 使用 pandas 的 ExcelFile 类来打开和加载名为 "xl/stores.xls" 的 Excel 文件。

as f: 将创建的 ExcelFile 对象赋值给变量 f。这样,在 with 语句的作用域内,你可以通过 f 来引用这个 ExcelFile 对象。


三 通过 URL 读取Excel 文件


http://www.ppmy.cn/server/175177.html

相关文章

Excel两列和依次相减

Excel实现左列依次行数的和减去右列依次行数的和: 举例:结余SUM(预付款)-SUM(开支) 公式:SUM($B$2:B2)-SUM($C$2:C2)

Zookeeper与Kafka学习笔记

一、Zookeeper核心要点 1. 核心特性 分布式协调服务&#xff0c;用于维护配置/命名/同步等元数据 采用层次化数据模型&#xff08;Znode树结构&#xff09;&#xff0c;每个节点可存储<1MB数据 典型应用场景&#xff1a; Hadoop NameNode高可用 HBase元数据管理 Kafk…

使用RKdevTool2.65为RK3399烧录固件时遇到的一些问题及其原因

以下都是本人遇到过的情况总结出的经验&#xff0c;仅供参考 1&#xff0c;主控芯片故障 如果按照官方的WIKI教程去使用瑞芯微工具烧录固件的时候&#xff0c;发现loader模式和MaskRom模式都进不去的话&#xff0c;并且用手触摸芯片的时候没有一点温度&#xff0c;那应该就是…

RSS和TSS在网络流量处理中的优化作用

摘要 本文深入探讨了RSS(Receive Side Scaling)和TSS(Transmit Side Scaling)这两种网络流量处理技术的实现方法及其在网络性能优化中的重要作用。通过对硬件和软件实现方式的详细分析,阐述了它们如何在多队列网卡、多核处理器系统以及虚拟化环境中提升网络处理性能和吞吐…

ue5 动画重定向匹配动画不合适怎么办?mixamo网站一键绑定

ue导出骨骼网格体 fbx模型导入maya 删除骨骼 选中模型 导出模型 打开米萨摩网站 https://www.mixamo.com/#/?page1&query&typeMotion%2CMotionPackupload模型 next 拖动圆圈 点击next 导出模型 导入ue 导入的时候选择动画 时间为带动画的时间 不创建材质

『Rust』Rust运行环境搭建

文章目录 rust编译工具rustupVisual Studio VS Code测试编译手动编译VSCode编译配置 参考完 rust编译工具rustup https://www.rust-lang.org/zh-CN/tools/install 换源 RUSTUP_DIST_SERVER https://rsproxy.cn RUSTUP_UPDATE_ROOT https://rsproxy.cn修改rustup和cargo的安…

sklearn中生成完整标签数据集、半监督数据集,多标签数据集的模拟方法

sklearn.datasets 是 scikit-learn 库中的一个模块&#xff0c;它提供了许多用于生成样本数据集和加载真实世界数据集的工具。以下是一些常用的函数和它们的用法&#xff1a; 生成有监督数据集 make_classification(n_samples100, n_features20, ..., random_stateNone) 生成一…

【大模型学习】第十九章 什么是迁移学习

目录 1. 迁移学习的起源背景 1.1 传统机器学习的问题 1.2 迁移学习的提出背景 2. 什么是迁移学习 2.1 迁移学习的定义 2.2 生活实例解释 3. 技术要点与原理 3.1 迁移学习方法分类 3.1.1 基于特征的迁移学习(Feature-based Transfer) 案例说明 代码示例 3.1.2 基于…