excel学习库

excel表格_excel函数公式大全_execl从入门到精通

别再用for循环遍历获取Excel数据,pandas一个函数搞定!不香吗?

前面内容,我们讲解了使用openpyxl处理Excel的基本方法,细心的小伙伴肯定发现了,我们利用openpyxl从Excel中获取数据时,多数情况下使用了for循环。for循环从前面的分析我们知道,对于海量数据,多次使用for循环会带来不必要的内存浪费。浪费可耻,节约光荣假设我们想要从一个Excel表格中某一列选择符合要求的数值(比如在某一区间范围内的数值),然后将这些数据写入到另一个Excel文件中,该如何解决呢?如何解决呢?如果使用第三方库openpyxl或者xlrd、xlwt,前面已经介绍了很多内容,感兴趣的小伙伴了解下。今天,我们来掌握另一个更加简单的方法,使用pandas库来处理Excel文件。此pandas非彼pandaspandas库 对于pandas库的讲解,今天不浪费过多篇幅,你只需知道它是一个功能强大的数据分析处理库即可。对于pandas库的讲解,网上有很多内容,今天这里就不赘述了。小伙伴们自己上网课吧我们先来看下,单就读取各种文件,pandas为我们提供了哪些接口? >>>import pandas as pf >>>print([i for i in dir(pd) if i.startswith('read')]) ['read_clipboard', (次粗略去n个方法,感兴趣的小伙伴自己尝试) 'read_stata', 'read_table'] 就读取各类文件,pandas为我们提供了将近20个函数接口供调用。感兴趣的小伙伴挨个试试看。重点来了,接着往下看pandas处理Excel文件 我们先来创建一个演示用的Excel文件,命名为‘test.xlsx’,里面一张表格score,记录了学生的语文数学成绩。如下:创建电子表用于测试下面,我们按照步骤来演示如何利用pandas操作一个Excel文件 # 导入模块 import pandas as pd 1.读取Excel文件 df = pd.read_excel('test.xlsx') 我们看下df是什么东东? print(type(df)) >>><class 'pandas.core.frame.DataFrame'> 它是一个DataFrame对象实例(这里暂且不论,后续专题讨论)。积少成多为了对这个函数加深理解,我们把完成参数列表整理了一下,感兴趣的小伙伴深入研究。 pd.read_excel(io,sheetname=0,header=0,skiprows=None,index_col=None,names=None,date_parser=None,na_values=None,thousands=None,convert_float=True,converters=None,dtype=None,true_values=None,false_values=None,engine=None,squeeze=False,**kwds) io :excel 路径sheetname:默认是sheetname为0,返回多表使用sheetname=[0,1],若sheetname=None是返回全表 。注意:int/string返回的是dataframe,而none和list返回的是dict of dataframeheader:指定作为列名的行,默认0,即取第一行,数据为列名行以下的数据;若数据不含列名,则设定 header = Noneskiprows:省略指定行数的数据index_col:指定列为索引列,也可以使用 u’string’names:指定列的名字,传入一个list数据date_parser:函数,用于将字符串列序列转换为日期时间实例na_values:na\nan字符串的处理方式thousands:用于将字符串列解析为数字的千位分隔符。注意,此参数仅适用于Excel中存储为文本的列。无论显示的如何,任何数值列都将自动解析convert_float:将整数浮点转换为整数(即1.0-->1)。如果为False,则为所有数字数据将作为浮点数读入,Excel将所有数字存储为浮点数内部converters:用于转换某些列中的值的函数。键可以是整数或列标签,值是接受一个输入参数、Excel单元格内容并返回转换内容的函数dtype:默认不指定,比如:{'a':np.float64,'b':np.int32}使用'object'保存Excel中存储的数据,而不解释数据类型。如果指定了转换器,则将应用它们而不是数据类型转换true_values:值视为真,传递列表,默认为Nonefalse_values:值视为假,传递列表,默认为Noneengine:如果io不是缓冲区或路径,则必须将其设置为标识io。可选的参数有:“xlrd”、“openpyxl”、“odf”、“pyxlsb”。兼容性描述:“xlrd”支持旧式Excel文件(.xls)、“openpyxl”支持更新的Excel文件格式、“odf”支持OpenDocument文件格式(.odf、.ods、.odt)、“pyxlsb”支持二进制Excel文件squeeze:如果解析的数据只包含一列,则返回一个序列。默认只包含一列时,不返回一个序列2.读取行数和列数及行列索引 row_num = len(df.index.values) col_num = len(df.columns.values)读取行列元素同理,行列索引我们使用下面方式获得 row_indexs = df.index.values print(row_indexs, type(row_indexs)) >>> [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21] <class 'numpy.ndarray'> 可以看出,列表索引是一个ndarray数组对象,注意,这里的索引是从0开始的。索引很重要哦同样的道理,我们获取列索引试试看 col_indexs = df.columns.values print(col_indexs, type(col_indexs)) >>> ['学生证号' '姓名' '性别' '年龄' '语文' '数学'] <class 'numpy.ndarray'> 它同样打印出了列索引,数据类型为numpy.ndarray 3.读取指定的单行或单列数据读取行列数据# 取单行数据(第一行) df.loc[0].values >>> array([20210001, '张三', '男', 24, 67, 87], dtype=object) 正确显示,默认第一行为标题行,没有展示 # 取单列数据(第一列) df.loc[:, '姓名'].values >>> array(['张三', '李四', '王五', '王二麻子', '张小双', ' 李赛', '李磊', '韩梅梅', '李小白', '杜甫堂', '孙悟空', '猪八戒', '唐僧', '沙和尚', '贾宝玉', '袭人', '薛宝钗', '林黛玉', '王熙凤', '刘姥姥','贾琏', '贾政'], dtype=object) 还可以使用DataFrame的iloc方法,不同的是iloc方法传入索引值(整数),loc方法传入标签值,记住这一点就可以了。上面同样可以用iloc实现 # 单行获取 df.iloc[0].values # 单列获取 df.iloc[:, 1].values 4.读取任意多行或多列数据 df.loc[行范围(标签表示), 列范围(标签表示)].values 或者是索引: df.iloc[行索引范围, 列索引范围] 如:选取0-10行姓名和语文成绩列 df.loc[:10, ['姓名', '语文'] ].values # df.iloc[:11, [1, 4]].values # (此处切片为左闭右开区间 >>> array([['张三', 67], ['李四', 65], ['王五', 63], ['王二麻子', 85], ['张小双', 82], ['李赛', 87], ['李磊', 94], ['韩梅梅', 99], ['李小白', 97], ['杜甫堂', 91], ['孙悟空', 79]], dtype=object)多行多列也不怕5.读取单元格数据或部分数据(同4视角不一样) # 获取第2行第2列的数值 print(pd.iloc[1, 1]) >>> "李四" # 获取第1,2行,2,4列的数据 data = df.iloc[[1,2], [2, 4]].values print(data) >>> [['男' 65] ['男' 63]] 注意,此时的索引都是从0开始的。 举个例子 下面,我们用一个简单的例子,来看下如何使用我们刚才学到的知识? 假设我们在'test.xlsx'中有另一张表格,它记录了学生的英文成绩。那么,我们今天的例子是将两张表格合并,并保存在'bobTest.xlsx'中。score2表格记录英文成绩如何做呢? 首先,我们需要数据: df1 = pd.read_excel('test.xlsx', sheet_name='score') df2 = pd.read_excel('test.xlsx', sheet_name='score2') # 两者合并,得到我们需要的数据 df3 = pd.merge(df, df2.iloc[:, [1,2]], how='inner', on='姓名') # how是连接方式,这里选择内连接,on是依据哪一列连接数据要保存起来数据有了,我们把数据保存起来 此时,使用df3.to_excel('bobTest.xlsx', sheet_name='score3')合并成功好了,数据成功合并了。用到一个for循环了没? 数数几行代码吧?4行代码搞定,是不是很方便? 好了,今天的内容就到这里了,喜欢Python编程的小伙伴点个赞,后续推出更加精彩的内容。 本文为作者原创,转载请注明出处,百家号:Python高手养成

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

«    2024年12月    »
1
2345678
9101112131415
16171819202122
23242526272829
3031
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
    文章归档
      友情链接