ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 4743|回复: 18

[原创] [ Excel-Python ] -8:用 Python 处理 Excel 中的行、列、单元格

[复制链接]

TA的精华主题

TA的得分主题

发表于 2021-6-19 00:25 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 Hi-Frank 于 2021-6-20 15:29 编辑

用 Python 处理 Excel 中的行、列、单元格



0. 引子

抱歉,这几天太忙了,没有及时更新,见谅!
整整十天连步都没跑,趁现在有点时间,更新一篇,谨表歉意。
感谢几位鞭策我更新的朋友,谢谢!

image.jpg


前几天在湖州,路过苕溪桥,放个照片做题图吧。
感慨于旅途奔波,写了一篇文章,分享一下:《洛神赋》—— 奔波的脚步,让心去旅行 。
地址:https://mp.weixin.qq.com/s/ONMvGJDzKDtFRaF9ggltzA

今天我们谈一下如何处理具体的行、列、单元格数据。


1. Python 为什么简洁又强大

到目前为止,我们用 Python 处理 Excel 的过程,其实是:用 Pandas 把 Excel 文件读出来 →→ 进行处理 →→然后再写入 Excel 文件

我们用的是 Pandas 的 read_excel() 方法,将数据读入 DataFrame 中。
此前为了大家好接受,我们直接拿来用,不求甚解。

不求甚解,是我认为最好的学习方法和讲课方法,放松心情,直接入门,逐步深入。

今天我们有必要对 Pandas 和 DataFrame 做进一步的认识:

Python 之所以强大,不仅仅因为语言简洁优美,更重要的,是它形成了一个庞大的生态体系。
就是,有大量的、各行各业的人,都在用它。并且,写了大量的、开源的、可免费使用的、针对不同行业业务的 函数、模块、可供调用。


上一篇我们用 Python 画图,很多人慨叹代码太简洁了。用 VBA 特复杂。
其实,应该这样感慨:如果有一个可爱的哥们儿,用 VBA 把画图的各项功能都写好、各种因素都考虑到,写成子程序,放到互联网上,我们随时可以下载,直接使用,给个参数就能直接画出图来,多好啊。


所以,Python 如果从底层写,也很麻烦,但是现成的模块太多了、太好用的。例如,我们上一帖用的 Matplotlib,就是一个最好用的 Python 二维画图工具集。仅此而已。


所以,有时将 Python 叫做胶水语言。就是,它的主要玩儿法,对于具体行业业务用户的玩儿法,就是不需要考虑复杂的编程,直接用各种现成的库,用几行代码,像胶水一样,把这些强大核心功能粘起来就好了。


好了,话说回来,进入正题:



2. 认识 Pandas


Pandas 是基于 Python 语言的快速、强大、灵活和易于使用的开源数据分析与处理工具。

Pandas 官网 https://pandas.pydata.org/  原文:

pandas is a fast, powerful, flexible and easy to use open source data analysis and manipulation tool, built on top of the Python programming language.


就是说,Pandas 为我们提供了大量的、功能强大的,专门进行数据处理和数据分析的工具,包括一系列函数、方法、数据结构等等。
Pandas 不是熊猫的意思,而是用 Panel Data 面板数据 造的词。

其中,Pandas 中有一个非常重要的数据结构: DataFrame 。

DataFrame 是 Pandas 中的一个表型的数据结构,包含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔型等),DataFrame 即有行索引也有列索引。就类似于 Excel 的表格。

我们来看大家已经用的熟练的这句代码:

  1. import pandas as pd

  2. df= pd.read_excel(r'd:\demo\orders2.xlsx', sheet_name='订单')
复制代码


第一行:将 pandas 引入到当前代码中。并将其简称为 pd

第二行:调用 pandas 的 read_excel()方法,把 orders2.xlsx文件的订单sheet 读到一个 DataFrame 中,给这个 DataFrame 起的的名字叫做 df 。

解释一下:
-  pandas 中有很多方法,例如,read_excel() 可以读 Excel 文件。Excel 文件结构很复杂,怎么打开怎么读怎么容错怎么啥啥,你都不用管了,人家 pandas 模块里面早都写好了,你想到没想到的问题,人家都有人帮你想到了。
后面我们还会用的 read_csv()方法,用于读 csv 文件。to_excel() 写入 Excel 文件,to_csv() 写入 csv 文件等等等等,我们以后用到再说。

pandas 的 read_excel() 方法,返回的是 DataFrame。我们到目前的例子,都是读一个指定的sheet,或默认读第一个(第0个)sheet。所以得到一个 DataFrame。
也可以用 read_excel()一次读如多个sheet,则会得到一个 DataFrame 的字典 Dict,这个我们以后说。

下面,我们通过操作使用 DataFrame,来认识和理解 DataFrame。


3. 认识 DataFrame

好了,数据读进来了,我们截图展示一下:

image.jpg

我们看到,df 的内容,就是 Excel 文件 orders2.xlsx 中 订单 sheet 的内容。

注意,它已经对数据进行了规整。
行前面有了从0开始的序列号。注意和 Excel文件中的行编号不是一码事儿。
“产品”“型号”“数量” 这一行字, 不是第一行(以后我们按标准说:第0行)的数据,而是作为列名,或者是叫表头。

请返回头去看我上面给出的 DataFrame 定义中的话:
DataFrame 即有行索引也有列索引。因为

到底是哪一行,得有个标识吧,就是这个:0,1,2,3...编号。这个就是行索引。
到底是那一列,得有个标识吧,就是这个:“产品”“型号”“数量” 列名。这个就是列索引。

有了行索引列索引,就可以指明任何一行、任何一列、任何一格了。
所谓 “格物致知”
image.png




于是,我们可以通过如下代码 获取一个 DataFrame 的行索引信息:

  1. df.index
复制代码
返回结果是:

    RangeIndex(start=0, stop=7, step=1)

意思是:行索引范围:从0开始,到7,步长为1


我们可以通过如下代码,获取列信息:

  1. df.columns
复制代码
返回结果是:

    Index(['产品', '型号', '数量'], dtype='object')

意思是:列索引名 “产品”“型号”“数量” ,数据类型:对象
我们可以通过如下代码获取 DataFrame 的大小:
  1. df.shape
复制代码
返回结果:

    (7, 3)

意思是:7行3列

image.png


4. 在 DataFrame 中处理行、列、单元格数据

   1) 得到行:
那么,我们就可以通过如下代码得到某一行:
  1. df.loc[2]
复制代码
返回值如下:
image.png

即返回了第2行的数据。注意他是转过来写的。这个不关键。另外,第2行,记住是从0开始数的,以后我不再强调了。


通过如下代码,可以返回若干行:

  1. df.loc[2:5]
复制代码
返回结果是:
image.png


  2) 得到列

我们可以用 df.列名 返回某一列的值,例如:

  1. df.产品
复制代码
结果是:
image.png


也可以写成:
  1. df['产品']
复制代码
结果同上。

用后一种方法,就可以多出多列,如:
  1. df[['产品','数量']]
复制代码
结果是:
image.png
注意,上述代码中,方括号有两层[[]],为啥,我们以后讲。

  3)得到格

我们可以通过  df[列名][行索引]  得到单元格内容,例如:
  1. df['产品'][2]
复制代码
image.png

再例如:
  1. df[['产品','数量']].loc[[1,3]]
复制代码
得到第1行和第3行的产品名称和数量数据:

image.png


5. 然后

我们已经理解了 Pandas, DataFrame,
我们已经能够自如地得到想要的数据了。
然后,我们就可以处理这些数据了。例如运算,例如汇总等等。
我们以后再讲,不然你要厌学了

今天的内容不炫酷,有些枯燥。
咬咬牙,坚持一下。
总不可能每次都是帅的炫酷的。

加油吧,反正我是跑马拉松的。

—— 我跑,故我在  HiFrank




<<<  上一篇:

[ Excel-Python ] -7:用 Python 绘图展示 Excel 中的数据
http://club.excelhome.net/thread-1588241-1-1.html

下一篇 >>>[ Excel-Python ] -9:让 Excel 起飞的超强 Python 库:xlwings
http://club.excelhome.net/thread-1589256-1-1.html






评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2021-6-19 07:50 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
第3个得到格 的例子使用时注意,会与多层索引的定位冲突,所以系统经常会出警告。

TA的精华主题

TA的得分主题

发表于 2021-6-19 08:13 | 显示全部楼层
这个适合开发工具用,不适合拿来做代工解决自动化,大家不要误入歧途了

TA的精华主题

TA的得分主题

发表于 2021-6-19 08:51 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-6-19 09:42 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
sheeboard 发表于 2021-6-19 07:50
第3个得到格 的例子使用时注意,会与多层索引的定位冲突,所以系统经常会出警告。

是的。
这个我们有详细展开,怕越扯越多。
不求甚解,先让大家了解。
后续安排深入的问题。

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-6-19 09:43 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-6-19 09:45 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
约定的童话 发表于 2021-6-19 08:13
这个适合开发工具用,不适合拿来做代工解决自动化,大家不要误入歧途了

嗯,
有道理。辨证认识吧。

两个目的吧:
1. 如果用的熟了,是可以做代工自动化的。后续还有些内容可以看到最终的效果。
2. 作为入门学习 Python 及机器学习的手段,毕竟有Excel的基础,容易入门。

TA的精华主题

TA的得分主题

发表于 2021-6-19 20:10 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
Hi-Frank 发表于 2021-6-19 09:45
嗯,
有道理。辨证认识吧。

对的,pandas只是数据清理和简单分析,后面步骤几个重量级的库才是正真厉害,如果能结合实际运用到办公中还真有可能实现办公无人化。顺便lz格致中学的?

TA的精华主题

TA的得分主题

发表于 2021-6-19 20:48 | 显示全部楼层
个人觉得:所谓简练应该是把台前的工作转到后台(由相应的函数库支撑)去做了,使用者感觉简单了,其他语言其实也可以开发相应的函数实现。这种方式,对初学者来说更容易上手,但遇到涉及细节问题或者特殊需求,通常还要回归基础。不少人反映Python 上手容易,精通难,应该就是这个原因吧。

TA的精华主题

TA的得分主题

发表于 2021-6-19 22:49 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-12-3 04:57 , Processed in 0.066419 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表