Pandas 操作Excel

news2024/12/27 8:06:32

Pandas 提供了便捷的方法来处理 Excel 文件,这主要得益于 pandas.read_excel() 和 DataFrame.to_excel() 这两个函数。

语法

pd.read_excel(io, sheet_name=0, header=0,
              names=None, index_col=None,
              usecols=None, squeeze=False,
              dtype=None, engine=None,
              converters=None, true_values=None,
              false_values=None, skiprows=None,
              nrows=None, na_values=None,
              keep_default_na=True, verbose=False,
              parse_dates=False, date_parser=None,
              thousands=None, comment=None, skipfooter=0,
              convert_float=True, mangle_dupe_cols=True, **kwds)

参数

  • 文件 io
    读取Excel 文件
# str, bytes, ExcelFile, xlrd.Book, path object, or file-like object
# 本地相对路径:
pd.read_excel('data/data.xlsx') # 注意目录层级
pd.read_excel('data.xls') # 如果文件与代码文件在同目录下
# 本地绝对路径:
pd.read_excel('/user/wfg/data/data.xlsx')
# 使用网址 url
pd.read_excel('https://wfg.com/file/data/dataset/team.xlsx')
  • 表格 sheet_name
    可以指定 Excel 文件读取哪个 sheet,默认取第一个。
# str, int, list, or None, default 0
pd.read_excel('tmp.xlsx', sheet_name=1) # 第二个 sheet
pd.read_excel('tmp.xlsx', sheet_name='总结表') # 按 sheet 的名字

# 取第一个、第二个、名为 Sheet1 的,返回一个 df 组成的字典
dfs = pd.read_excel('tmp.xlsx', sheet_name=[0, 1, "Sheet1"])
dfs = pd.read_excel('tmp.xlsx', sheet_name=None) # 所有的 sheet
dfs['Sheet5'] # 读取时按 sheet 名
  • 表头 header
    数据的表头,默认为第一行。
pd.read_excel('tmp.xlsx', header=None)  # 不设表头
pd.read_excel('tmp.xlsx', header=2)  # 第三行为表头
pd.read_excel('tmp.xlsx', header=[0, 1])  # 两层表头,多层索引
  • 列名/表头名 names
    默认取数据中默认的表头名称,可以重新指定。
# array-like, default None
pd.read_excel('tmp.xlsx', names=['姓名', '年龄', '成绩'])
pd.read_excel('tmp.xlsx', names=c_list) # 传入列表变量
# 没有表头,需要设置为 None
pd.read_excel('tmp.xlsx', header=None, names=None)
  • 索引列 index_col
    作为索引的列,默认不设置,使用自然索引(从 0 开始)。
# int, list of int, default None
pd.read_excel('tmp.xlsx', index_col=0) # 指定第一列
pd.read_excel('tmp.xlsx', index_col=[0,1]) # 前两列,多层索引
  • 使用列 usecols
    指定使用的列,其余的不读取,默认是全部使用。
# int, str, list-like, or callable default None
pd.read_excel('tmp.xlsx', usecols='A,B')  # 取 A 和 B 两列
pd.read_excel('tmp.xlsx', usecols='A:H')  # 取 A 到 H 列
pd.read_excel('tmp.xlsx', usecols='A,C,E:H')  # 取 A和C列,再加E到H列
pd.read_excel('tmp.xlsx', usecols=[0,1])  # 取前两列
pd.read_excel('tmp.xlsx', usecols=['姓名','性别'])  # 取指定列名的列
# 表头包含 Q 的
pd.read_excel('team.xlsx', usecols=lambda x: 'Q' in x)
  • 返回序列 squeezebool
    如果只要一列,则返回一个 Series,默认还是 DataFrame。
# default False
pd.read_excel('tmp.xlsx', usecols='A', squeezebool=True)
  • 数据类型 dtype
    数据类型,如果不传则自动推断。如果被 converters 处理则不生效。
# Type name or dict of column -> type, default None
pd.read_excel(data, dtype=np.float64) # 所有数据均为此数据类型
pd.read_excel(data, dtype={'c1':np.float64, 'c2': str}) # 指定字段的类型
pd.read_excel(data, dtype=[datetime, datetime, str, float]) # 依次指定
  • 处理引擎 engine
    可接受的参数值是 “xlrd”, “openpyxl” 或者 “odf”,如果文件不是缓冲或路径,就需要指定,用于处理 excel 使用的引擎,三方库。
# str, default None
pd.read_excel('tmp.xlsx', engine='xlrd')

在实践中,默认的 xlrd 引擎不会读取内容为星号*、百分号 % 等特殊字符的行,可以更换为 openpyxl 解决。

  • 列数据处理 converters
    对列的数据进行转换,列名与函数组成的字典。key 可以是列名或者列的序号。
# dict, default None
def foo(p):
   return p + 's'

# x 应用函数, y 使用 lambda
pd.read_excel('tmp.xlsx', converters={'x': foo,
                                    'y': lambda x: x * 3})
# 使用列索引
pd.read_excel('tmp.xlsx',
            converters={0: foo, 1: lambda x: x * 3})
  • 真假值指定 true_values false_values
    将指定的文本转换为 True 或者 False, 可以用列表指定多个值。
# list, default None
pd.read_excel('tmp.xlsx',
            true_values=['Yes'], false_values=['No'])
  • 跳过指定行 skiprows
# list-like, int or callable, optional
# 跳过前三行
pd.read_excel(data, skiprows=2)
# 跳过前三行
pd.read_excel(data, skiprows=range(2))
# 跳过指定行
pd.read_excel(data, skiprows=[24,234,141])
# 跳过指定行
pd.read_excel(data, skiprows=np.array([2, 6, 11]))
# 隔行跳过
pd.read_excel(data, skiprows=lambda x: x % 2 != 0)
# 跳过最后几行用 skipfooter=2
  • 读取行数 nrows
    需要读取的行数,从文件开头算起,经常用于较大的数据,先取部分进行代码编写。
# int, default None
pd.read_excel(data, nrows=1000)
  • 空值替换 na_values
    一组用于替换 NA/NaN 的值。如果传参,需要制定特定列的空值。
# scalar, str, list-like, or dict, default None
# 5 和 5.0 会被认为 NaN
pd.read_excel(data, na_values=[5])
# ? 会被认为 NaN
pd.read_excel(data, na_values='?')
# 空值为 NaN
pd.read_excel(data, keep_default_na=False, na_values=[""])
# 字符 NA 字符 0 会被认为 NaN
pd.read_excel(data, keep_default_na=False, na_values=["NA", "0"])
# Nope 会被认为 NaN
pd.read_excel(data, na_values=["Nope"])
# a、b、c 均会被认为 NaN 等于 na_values=['a','b','c']
pd.read_excel(data, na_values='abc')
# 指定列的指定值会被认为 NaN

pd.read_excel(data, na_values={'c':3, 1:[2,5]})
  • 保留默认空值 keep_default_na
    分析数据时是否包含默认的NaN值,是否自动识别。如果指定 na_values 参数,并且 keep_default_na=False,那么默认的NaN将被覆盖,否则添加。

和 na_values 的关系是:

keep_default_nana_values逻辑
True指定na_values 的配置附加处理
True未指定自动识别
False指定使用 na_values 的配置
False未指定不做处理

注:如果 na_filter 为 False (默认是 True), 那么 keep_default_na 和 na_values parameters 均无效。

# boolean, default True
# 不自动识别空值
pd.read_excel(data, keep_default_na=False)
  • 丢失值检查 na_filter
    是否检查丢失值(空字符串或者是空值)。对于大文件来说数据集中没有空值,设定na_filter=False 可以提升读取速度。
# boolean, default True
pd.read_excel(data, na_filter=False) # 不检查
  • 解析信息 verbose
    是否打印各种解析器的输出信息,例如:“非数值列中缺失值的数量”等。
# boolean, default False
# 可以看到解析信息
pd.read_excel(data, verbose=True)
# Tokenization took: 0.02 ms
# Type conversion took: 0.36 ms
# Parser memory cleanup took: 0.01 ms
  • 日期时间解析 parse_dates
    本参数对时间日期进行解析。
# boolean or list of ints or names or list of lists or dict, default False.
pd.read_excel(data, parse_dates=True) # 自动解析日期时间格式
pd.read_excel(data, parse_dates=['年份']) # 指定日期时间字段进行解析

# 将 1、4 列合并解析成名为 时间的 时间类型列
pd.read_excel(data, parse_dates={'时间':[1,4]})
  • 日期时间解析器 date_parser
    用于解析日期的函数,默认使用dateutil.parser.parser来做转换。Pandas 尝试使用三种不同的方式解析,如果遇到问题则使用下一种方式。

    • 使用一个或者多个arrays(由parse_dates指定)作为参数;
    • 连接指定多列字符串作为一个列作为参数;
    • 每行调用一次date_parser函数来解析一个或者多个字符串(由parse_dates指定)作为参数。
# function, default None
# 指定时间解析库,默认是 dateutil.parser.parser
date_parser=pd.io.date_converters.parse_date_time
date_parser=lambda x: pd.to_datetime(x, utc=True, format='%d%b%Y')
date_parser = lambda d: pd.datetime.strptime(d, '%d%b%Y')
# 使用
pd.read_excel(data, parse_dates=['年份'], date_parser=date_parser)
  • 千分位分割符 thousands
    千位分隔符。
# str, default None
pd.read_excel(data, thousands=',') # 逗号分隔
  • 注释标识 comment
    指示不应分析行的部分。 如果在一行的开头找到该行,则将完全忽略该行。 此参数必须是单个字符。 像空行一样(只要skip_blank_lines = True),参数视为header会忽略完全注释的行,而skiprows 行会忽略。 例如,如果comment =‘#’,则解析header= 0的’#empty \ na,b,c \ n1,2,3’会将’a,b,c’视为header。
# str, default None
s = '# notes\na,b,c\n# more notes\n1,2,3' # 仅为示例
pd.read_excel(data, sep=',', comment='#', skiprows=1)
  • 尾部跳过 skipfooter
    从文件尾部开始忽略。 (c引擎不支持)
# int, default 0
pd.read_excel(filename, skipfooter=1) # 最后一行不加载
  • 转为浮点 convert_float
    读取 Excel 默认把数字转为浮点,设为 False 将保留整型。
# bool, default True
pd.read_excel('tmp.xlsx', convert_float=False)
  • mangle_dupe_cols
  • 处理重复列名 mangle_dupe_cols
    当列名有重复时,解析列名将变为 ‘X’, ‘X.1’…’X.N’而不是 ‘X’…’X’。 如果该参数为 False ,那么当列名中有重复时,前列将会被后列覆盖。
# bool, default True
data = 'a,b,a\n0,1,2\n3,4,5' # 仅为示例
pd.read_excel(data, mangle_dupe_cols=True)
# 表头为 a b a.1
# False 会报 ValueError 错误
  • 存储选项 storage_options

  • **其他参数 kwds
    TextFileReader 处理的其他参数。

  • 返回
    一般情况下,会将读取到的数据返回一个 DataFrame,当然按照参数的要求会返回指定的类型。

示例
Pandas 提供了便捷的方法来处理 Excel 文件,这主要得益于 pandas.read_excel() 和 DataFrame.to_excel() 这两个函数。以下是使用 Pandas 操作 Excel 文件的一些关键步骤和示例:

  • 读取 Excel 文件
    要读取 Excel 文件中的数据,你可以使用 pandas.read_excel() 函数。这个函数能够读取指定工作表中的数据,并将其转换为一个 Pandas DataFrame 对象。
import pandas as pd
 
# 读取 Excel 文件中的特定工作表
df = pd.read_excel('example.xlsx', sheet_name='Sheet1')
 
# 如果需要读取所有工作表,可以将 sheet_name 设置为 None,这将返回一个包含所有工作表数据的字典
sheets = pd.read_excel('example.xlsx', sheet_name=None)
  • 处理读取的数据
    一旦数据被读取到 DataFrame 中,你就可以使用 Pandas 提供的各种函数和方法来处理这些数据了。例如,你可以对数据进行筛选、排序、分组、聚合等操作。
# 假设我们有一个名为 'df' 的 DataFrame
# 筛选出某列值满足特定条件的行
filtered_df = df[df['column_name'] > some_value]
 
# 对数据进行排序
sorted_df = df.sort_values(by='column_name')
  • 将数据写回 Excel 文件
    处理完数据后,你可能希望将结果保存回 Excel 文件中。这时,你可以使用 DataFrame.to_excel() 方法。
# 将 DataFrame 写入新的 Excel 文件
df.to_excel('output.xlsx', sheet_name='Sheet1', index=False)
 
# 如果你想将多个 DataFrame 写入同一个 Excel 文件的不同工作表,可以使用 ExcelWriter
with pd.ExcelWriter('multiple_sheets.xlsx') as writer:
    df1.to_excel(writer, sheet_name='Sheet1', index=False)
    df2.to_excel(writer, sheet_name='Sheet2', index=False)

注意事项

  • 文件路径:确保你提供的文件路径是正确的,并且程序有足够的权限去读取和写入文件。
  • 工作表名称:在读取或写入工作表时,确保指定的工作表名称是存在的,或者你已经正确地处理了工作表不存在的情况。
  • 数据类型:在读取和写入数据时,注意数据类型的兼容性。例如,如果 Excel 文件中的日期是以文本格式存储的,你可能需要在读取后进行类型转换。
  • 性能:对于大型数据集,读取和写入 Excel 文件可能会比较慢,并且可能会受到内存限制。在这种情况下,你可以考虑将数据分批处理或使用更适合大数据集的格式(如 CSV)。
  • 依赖项:Pandas 使用 openpyxl 或 xlrd 库来读取和写入 Excel 文件(xlrd 从版本 2.0.0 开始不再支持 .xlsx 格式,因此推荐使用 openpyxl)。确保你已经安装了这些库。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2251563.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

uniapp-vue2引用了vue-inset-loader插件编译小程序报错

报错信息 Error: Vue packages version mismatch: - vue3.2.45 (D:\qjy-myApp\admin-app\node_modules\vue\index.js) - vue-template-compiler2.7.16 (D:\qjy-myApp\admin-app\node_modules\vue-template-compiler\package.json) This may cause things to work incorrectly.…

【人工智能-科普】图神经网络(GNN):与传统神经网络的区别与优势

文章目录 图神经网络(GNN):与传统神经网络的区别与优势什么是图神经网络?图的基本概念GNN的工作原理GNN与传统神经网络的不同1. 数据结构的不同2. 信息传递方式的不同3. 模型的可扩展性4. 局部与全局信息的结合GNN的应用领域总结图神经网络(GNN):与传统神经网络的区别与…

【C#设计模式(15)——命令模式(Command Pattern)】

前言 命令模式的关键通过将请求封装成一个对象,使命令的发送者和接收者解耦。这种方式能更方便地添加新的命令,如执行命令的排队、延迟、撤销和重做等操作。 代码 #region 基础的命令模式 //命令(抽象类) public abstract class …

Shell脚本小练习

学习了这么长时间Shell脚本,总得来一次小小的练习吧,那么请看下文! 1.用Shell写一个小计算器。 通过read命令获取用户输入的表达式,表达式的格式设定为操作数1 运算符 操作数2,例如53,然后利用设计的脚本…

二,[ACTF2020 新生赛]Include1感谢 Y1ng 师傅供题。

进入靶场后,发现tips可以点击 点击后进入此页面 猜测此为文件包含漏洞,构造payload,并成功得到base64编码后的源码 详解payload: php://filter/readconvert.base64-encode/resourceflag.php 1.php://filter是PHP中的一个流封装协议&#xf…

技术实践 | AI 安全:通过大模型解决高危WEB应用识别问题

一、引言 在日常企业安全能力建设中,收敛企业外网高危资产,以保障公司外部安全是企业安全的重要工作。WEB 高危服务(如:管理后台、内部系统等)外开是企业所面临的一个重要风险。针对该风险,传统的方式是基…

【Linux】TCP网络编程

目录 V1_Echo_Server V2_Echo_Server多进程版本 V3_Echo_Server多线程版本 V3-1_多线程远程命令执行 V4_Echo_Server线程池版本 V1_Echo_Server TcpServer的上层调用如下,和UdpServer几乎一样: 而在InitServer中,大部分也和UDP那里一样&…

osg、osgearth源码编译(二)

如果比较懒,也可以不看这篇文章,网上应该有很多编译好的库。也可以找我要。 本人还是建议学会编译,因为其他人电脑上编译好的,可能在你的电脑环境上,出现这样那样奇怪的问题,所以,最好还是自己能…

【QGIS入门实战精品教程】4.11:文本型字段转浮点型

《QGIS入门实战精品教程(配套案例数据)》:本专栏以实战案例的形式,深入浅出地介绍了QGIS的基本使用方法,用一个个实例讲解了QGIS基本操作与常见的空间分析方法。订阅专栏,获取专栏内所有文章阅读权限,从私信查收配套实验数据等资料,持续同步更新! 文章目录 一、加载实…

【R库包安装】R库包安装总结:conda、CRAN等

【R库包安装】R studio 安装rgdal库/BPST库 R studio 安装rgdal库解决方法 R studio 安装BPST库(github)解决方法方法1:使用devtools安装方法2:下载安装包直接在Rstudio中安装 参考 基础 R 库包的安装可参见另一博客-【R库包安装】…

探索 IntelliJ IDEA 中 Spring Boot 运行配置

前言 IntelliJ IDEA 作为一款功能强大的集成开发环境(IDE),为 Spring Boot 应用提供了丰富的运行配置选项,定义了如何在 IntelliJ IDEA 中运行 Spring Boot 应用程序,当从主类文件运行应用程序时,IDE 将创建…

Qt支持RKMPP硬解的视频监控系统/性能卓越界面精美/实时性好延迟低/录像存储和回放/云台控制

一、前言 之前做的监控系统,已经实现了在windows上硬解码比如dxva2和d3d11va,后续又增加了linux上的硬解vdpau的支持,这几种方式都是跨系统的硬解实现方案,也是就是如果都是windows系统,无论X86还是ARM都通用&#xf…

全面解读权限控制与RBAC模型在若依中的实现

目录 前言1 权限控制基础概念1.1 权限控制的核心要素1.2 常见权限控制模型 2 RBAC模型详解2.1 RBAC的基本原理2.2 RBAC的优点2.3 RBAC的扩展模型 3 若依框架中的权限管理3.1 菜单管理3.2 角色管理3.3 用户管理 4 若依权限管理的实现流程4.1 创建菜单4.2 创建角色并分配权限4.3 …

qt QGraphicsEllipseItem详解

1、概述 QGraphicsEllipseItem是Qt框架中QGraphicsItem的一个子类,它提供了一个可以添加到QGraphicsScene中的椭圆项。QGraphicsEllipseItem表示一个带有填充和轮廓的椭圆,也可以用于表示椭圆段(通过startAngle()和spanAngle()方法&#xff…

SAP SD学习笔记15 - 返品处理流程2 - 参照请求传票(发票)来生成返品传票

上一章讲了返品处理(退货处理)的流程。 SAP SD学习笔记14 - 返品处理(退货处理)的流程以及系统实操,比如 返品传票;请求Block标记;收到退货之后的处理,请求传票的登录_sap 销售返品…

在 ASP.NET C# Web API 中实现 Serilog 以增强请求和响应的日志记录

介绍 日志记录是任何 Web 应用程序的关键方面。它有助于调试、性能监控和了解用户交互。在 ASP.NET C# 中,集成 Serilog 作为记录请求和响应(包括传入和传出的数据)的中间件可以显著提高 Web API 的可观察性和故障排除能力。 在过去的几周里&…

Y20030018基于Java+Springboot+mysql+jsp+layui的家政服务系统的设计与实现 源代码 文档

家政服务系统的设计与实现 1.摘要2.开发目的和意义3.系统功能设计4.系统界面截图5.源码获取 1.摘要 随着人们生活水平的提高,老龄化、少子化等多重因素影响,我国对家政服务人群的需求与日俱增。家政服务行业对我国的就业和社会效益贡献也与日俱增&#…

基于AutoEncode自编码器的端到端无线通信系统matlab误码率仿真

目录 1.算法仿真效果 2.算法涉及理论知识概要 3.MATLAB核心程序 4.完整算法代码文件获得 1.算法仿真效果 matlab2022a仿真结果如下(完整代码运行后无水印): 仿真操作步骤可参考程序配套的操作视频。 2.算法涉及理论知识概要 自编码器是…

深度学习与持续学习:人工智能的未来与研究方向

文章目录 1. 持续学习与深度学习1.1 深度学习的局限1.2 持续学习的定义 2. 目标与心智2.1 奖励假说2.2 心智的构成 3. 对研究方法的建议3.1 日常写作记录3.2 中立对待流行趋势 1. 持续学习与深度学习 1.1 深度学习的局限 深度学习注重“瞬时学习”,如ChatGPT虽在语…

使用C#开发VTK笔记(三)-使用VTK创建可视化界面和简单点线面体模型

一.使用VTK创建可视化界面 1.创建C#可视化界面 使用Visual Studio 2022用.net 8.0创建窗体应用 放入两个水平分割的Panel左侧演示VTK 右侧放按钮 按照第一章节环境搭建的步骤,加入对应Kitware的dll并导入依赖 2.初始化Vtk窗口 引用Kitware.VTK,Form1_Load中,创建渲染窗口控…