本帖最后由 Hi-Frank 于 2021-6-20 15:29 编辑
用 Python 处理 Excel 中的行、列、单元格
0. 引子
抱歉,这几天太忙了,没有及时更新,见谅!
整整十天连步都没跑,趁现在有点时间,更新一篇,谨表歉意。
感谢几位鞭策我更新的朋友,谢谢!
前几天在湖州,路过苕溪桥,放个照片做题图吧。
感慨于旅途奔波,写了一篇文章,分享一下:《洛神赋》—— 奔波的脚步,让心去旅行 。
地址: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 的表格。
我们来看大家已经用的熟练的这句代码:
- import pandas as pd
- 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
好了,数据读进来了,我们截图展示一下:
我们看到,df 的内容,就是 Excel 文件 orders2.xlsx 中 订单 sheet 的内容。
注意,它已经对数据进行了规整。
行前面有了从0开始的序列号。注意和 Excel文件中的行编号不是一码事儿。
“产品”“型号”“数量” 这一行字, 不是第一行(以后我们按标准说:第0行)的数据,而是作为列名,或者是叫表头。
请返回头去看我上面给出的 DataFrame 定义中的话:
DataFrame 即有行索引也有列索引。因为
到底是哪一行,得有个标识吧,就是这个:0,1,2,3...编号。这个就是行索引。
到底是那一列,得有个标识吧,就是这个:“产品”“型号”“数量” 列名。这个就是列索引。
有了行索引列索引,就可以指明任何一行、任何一列、任何一格了。
所谓 “格物致知”
于是,我们可以通过如下代码 获取一个 DataFrame 的行索引信息:
RangeIndex(start=0, stop=7, step=1)
意思是:行索引范围:从0开始,到7,步长为1
我们可以通过如下代码,获取列信息:
Index(['产品', '型号', '数量'], dtype='object')
意思是:列索引名 “产品”“型号”“数量” ,数据类型:对象
我们可以通过如下代码获取 DataFrame 的大小:返回结果:
(7, 3)
意思是:7行3列
4. 在 DataFrame 中处理行、列、单元格数据
1) 得到行: 那么,我们就可以通过如下代码得到某一行: 返回值如下:
即返回了第2行的数据。注意他是转过来写的。这个不关键。另外,第2行,记住是从0开始数的,以后我不再强调了。
通过如下代码,可以返回若干行:
2) 得到列
我们可以用 df.列名 返回某一列的值,例如:
用后一种方法,就可以多出多列,如: 注意,上述代码中,方括号有两层[[]],为啥,我们以后讲。
3)得到格
我们可以通过 df[列名][行索引] 得到单元格内容,例如:
再例如:
- df[['产品','数量']].loc[[1,3]]
复制代码得到第1行和第3行的产品名称和数量数据:
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
|