对于非计算机专业来说,我们常常碰到 Excel 文件需要处理,这里记录一下 Python 从 Excel 表格中读取的方法。
参考链接:
Pandas 数据结构 – DataFrame | 菜鸟教程 (runoob.com)
pandas – Python Data Analysis Library (pydata.org)
如何最简单、通俗地理解Python的pandas库? – 知乎 (zhihu.com)
csv和xlsx有什么分別? – 知乎 (zhihu.com)
python读取excel xlrd和pandas区别? – 知乎 (zhihu.com)
Python 自动化操作 Excel 看这一篇就够了 – 知乎 (zhihu.com)
利用 Pandas 读取 Excel 文件
在介绍如何利用 Pandas 读取文件之前,首先先了解什么是Pandas,Pandas 全称 Python data analysis ,主要用于读取、处理、数据可视化的相关工作,是一个应用广泛的开源数据分析工具。
此外,Pandas 是基于 Numpy 开发的,Numpy的很多结构可以直接在Pandas中使用。
使用 Pandas 之前,其两种数据结构需要了解,简单点说就是 Pandas 中数据以什么样的格式储存,一种是 Series ,另一种是 DataFrame 。
Series 类似于一维数组,由标签与值组成,标签(也称索引)可以自动分配也可以自行指定,这里就不去介绍其具体使用方法。
DataFrame 就像是多个 Series 组成的结构,包含了行与列。
了解了数据结构就可以开始着手文件的读入。
首先,我们常用的数据格式有 csv 格式与 xls/xlsx 格式,前者是文本文件,可以用记事本打开,当然也可以用Excel打开,后者为二进制文件,只能够通过 Excel 打开。
需要注意的是 csv 格式中,数据之间是利用逗号分隔开,并且只保留有第一个 sheet ,如果有多个 sheet 或者需要保留表格中公式等信息,需要另存为 xls/xlsx。
(对于我们来说,xls/xlsx 之间没有区别,xlsx 由于使用XML类型的结构,占用空间会更小)
import pandas as pd # pandas.read_excel可以用于xls,xlsx,xlsm,xlsb,odf,ods和odt文件扩展名的数据读取,支持选取 sheet # 这里介绍常见的几个参数设置 df = pd.read_excel(r'C:\Users\asus\Desktop\python学习\test.xlsx', sheet_name=['Sheet1', 'Sheet2'], header=0, index_col=None, usecols="A:C", engine="openpyxl") ''' sheet_name: 读取sheet表格的名称 header: 表头所在的行号 index_col: 列号存在的列号,通常None usecols: 使用到的列 engine: 指定文件格式,xls(旧 Excel 文件)使用“xlrd”,xlsx(新 Excel 文件)使用“openpyxl” ''' print(df['Sheet1']) df1 = pd.read_csv(r"C:\Users\asus\Desktop\python学习\test.csv", delimiter=',') ''' delimiter: 作用与 sep 一致,用于指定分隔符号 其他的参数和 read_excel类似 ''' print(df1)
以上是一些基础的介绍,详细的可以看官方文档:pandas.read_excel — pandas 1.5.2 documentation (pydata.org)
正常来说,Pandas 更多的是处理大量的数,如果对数据做一些自定义的操作,可以将 DataFrame 格式转化成数组或者列表再进行处理,当然,DataFrame 本身就有很多操作指令,熟悉的情况下直接用更好。
利用 xlrd 包读取 Excel 文件
对于我们来说 Pandas 包已经可以满足我们几乎所有的 Excel 相关操作,xlrd 包相较而言更加底层一点点,Pandas 读取 Excel 文件的时候内部会根据文件的后缀名分别调用 xlrd 或者 openpyxl,在文件结构复杂时,用 xlrd 来处理能够获取更快的处理速度,特别是当 Excel 表格中包含有多重表头时。
import xlrd # xlrd 自身无法读取 xlsx 文件,需要用 openpyxl # 首先打开文件,获取文件对象 data = xlrd.open_workbook(r"C:\Users\asus\Desktop\python学习\test.xls") # 获取表格对象 table = data.sheet_by_name('Sheet1') # 读取值 cell = table.cell_value(1,1) print(cell)
看起来就很麻烦,对于我这种代码伸手党极为不友好,就不咋继续写了。
评论
还没有任何评论,你来说两句吧!