详解pandas中利用DataFrame对象的.loc[]、.iloc[]方法抽取数据


Posted in Python onDecember 13, 2020

pandas的DataFrame对象,本质上是二维矩阵,跟常规二维矩阵的差别在于前者额外指定了每一行和每一列的名称。这样内部数据抽取既可以用“行列名称(对应.loc[]方法)”,也可以用“矩阵下标(对应.iloc[]方法)”两种方式进行。
下面具体说明:

(以下程序均在Jupyter notebook中进行,部分语句的print()函数省略)

首先生成一个DataFrame对象:

import pandas as pd
score = [[34,67,87],[68,98,58],[75,73,86],[94,59,81]]
name = ['小明','小红','小李']
course = ['语文','数学','英语','政治']
mydata1 = pd.DataFrame(data=score,columns=name,index=course)#指定行名(index)和列名(columns)
print(mydata1)
mydata2 = pd.DataFrame(score)#不指定行列名,默认使用0,1,2……
print(mydata2)
#指定行列名
  小明 小红 小李
语文 34 67 87
数学 68 98 58
英语 75 73 86
政治 94 59 81
#采用默认行列名
  0  1  2 (默认列名)
0 34 67 87
1 68 98 58
2 75 73 86
3 94 59 81

DataFrame对象生成时除了必须指定data参数外,用户还可以指定两个参数columns(列名)和index(行名,注意这里的index不仅可以是数字,也可以是用户指定的任何数据类型,如字母),如果不指定,则行列名默认都采用0、1、2……。

下图说明了前面的情况:

详解pandas中利用DataFrame对象的.loc[]、.iloc[]方法抽取数据

DataFrame对象的.loc[]和.iloc[]方法都可用于抽取数据,区别是:

  • .loc[]:是location,以columns(列名)和index(行名)作为参数。
  • .iloc[]:是index location,以二维矩阵的位置指标(即0,1,2……)作为参数。

.loc[]语法

.loc[行标签名/[行标签名list],列标签名/[列标签名list]],即有两个输入参数,第一个指定行名,第二个指定列名。当只有一个参数时,默认是行名(即抽取整行),所有列都选中。

.iloc[]语法

.loc[行位置/[行位置list],列位置/[列位置list]],也有两个输入参数,第一个指定行位置,第二个指定列位置。当只有一个参数时,默认是行位置(即抽取整行),所有列都选中。

例1.抽取1行数据

#以下用.loc[]抽取1行名为‘语文'的数据(包括所有列)
mydata1.loc['语文']
mydata1.loc['语文',]
mydata1.loc['语文',:]
mydata1.loc[['语文'],]
mydata1.loc[['语文'],:]
#以下用.iloc[]抽取1行名为‘语文'的数据(包括所有列)
mydata1.iloc[0]
mydata1.iloc[0,]
mydata1.iloc[0,:]
mydata1.iloc[[0],]
mydata1.iloc[[0],:]

#输出方式1(第1个参数无[],这是一个Series对象):
小明  34
小红  67
小李  87
Name: 语文, dtype: int64
#输出方式2(第1个参数有[],这是一个DataFrame对象):
  小明 小红 小李
语文 34 67 87
Name: 语文, dtype: int64

上述.loc[]和.iloc[]都只接收了1个参数“语文”或者“0”,因此默认都表示行信息,而列则全部被选中,即抽取'语文'这整一行数据。','表示将两个参数隔开(如果有两个参数的话),':'这里表示选择中所有列。当只有一个输入参数时,python默认','和':'既可写上也可省略。注意:参数['语文']或[0]中只有一个对象时(即只有一行),[]也可以省略,如果有多个对象(即多行)则必须加上[]。此外还需注意,加上[]表示抽取的结果无论是一个数据,一行数据,还是一列数据,他都是DataFrame对象;不加[]时,如果选中的是一行或者一列数据,则是Series对象,如果是一个单独的数据,则是该数据本身的类型。

例2.指定行名抽取任意多行数据

#指定多行行名抽取
mydata1.loc[['英语','语文','政治'],:]
  小明 小红 小李
英语 75 73 86
语文 34 67 87
政治 94 59 81
mydata1.iloc[[1,0],:]
  小明 小红 小李
数学 68 98 58
语文 34 67 87

例2和例1唯一的差别是,第一个参数指定了多行一起输出,此时必须用[]将各行名或者下标括起来,否则出错。后面的','和':'同例1,可省略。注意:原始数据的行顺序是:语文、数学、英语、政治,这里的提取顺序是['英语','语文','政治'],而输出也是'英语','语文','政治',可见输出顺序和参数指定顺序是一致的,而非按原始顺序输出。

例3.抽取连续任意多行数据

mydata1.loc['语文':'英语',:] #连续抽取从语文到英语的所有行
  小明 小红 小李
语文 34 67 87
数学 68 98 58
英语 75 73 86

mydata1.loc[:'英语',:] #连续抽取从第1行到英语的所有行
  小明 小红 小李
语文 34 67 87
数学 68 98 58
英语 75 73 86

mydata1.iloc[0:3,:] #连续抽取1~3行
  小明 小红 小李
语文 34 67 87
数学 68 98 58
英语 75 73 86

mydata1.iloc[1:,:] #连续抽取第2行最后一行
  小明 小红 小李
数学 68 98 58
英语 75 73 86
政治 94 59 81

例3依然是接受1个参数,列参数没有,后面的','和':'同例1,可省略。连续参数用‘start:end'的方式指定行范围。注意:这里不能用[]将其括起来,否则出错。此外用行列名连续取值时,比如['语文':'政治']会把'政治'所在行也取出来,而利用矩阵下标时,0:3只取0,1,2对应的三行,最后一行不会取出;但是如果行列标签名本身就是整数0,1,2……,而不是文字或者其他类型,那么在使用连续行列标签名取数据时,最后一行或者列是不会被取出的。

例4.抽取“列”的各种情况

mydata1.loc[:,['小红']] #所有行,小红列,只有一列时,内部[]也可以省略
  小红
语文 67
数学 98
英语 73
政治 59

mydata1.loc[:,['小明','小红']] #所有行,小明和小红两列
  小明 小红
语文 34 67
数学 68 98
英语 75 73
政治 94 59

mydata1.iloc[:,[1,2]] #所有行,第2和第3列
  小红 小李
语文 67 87
数学 98 58
英语 73 86
政治 59 81

mydata1.loc[:,'小明':] #连续抽取从小明列开始到最后一列
  小明 小红 小李
语文 34 67 87
数学 68 98 58
英语 75 73 86
政治 94 59 81

mydata1.iloc[:,:3] #连续抽取从1列开始到第3列
  小明 小红 小李
语文 34 67 87
数学 68 98 58
英语 75 73 86
政治 94 59 81

抽取整列的方式跟抽取整行在参数设置上完全一样。.loc[]和.iloc[]两个方法默认列为第二个参数,因此抽取整列时,都必须带上':,'作为区分前面行参数的‘分隔符',否则出错。

例5.同时抽取指定行和列对应数据

mydata1.loc['语文','小明'] #输入了两个参数,输出语文行小明列,即一个数据
34
<class 'numpy.int64'> #没带[]时,单个数字是这种类型
mydata1.loc[['语文'],['小明']] #输出语文行小明列,即一个数据
  小明
语文 34
<class 'pandas.core.frame.DataFrame'> #带[]时,输出依然是DataFrame对象

mydata1.iloc[1,2] #第2行第3列数据,单个数据
58
<class 'numpy.int64'> #注意没带[]时的输出类型
mydata1.iloc[[1],[2]]
  小李
数学 58
<class 'pandas.core.frame.DataFrame'> #注意带[]时的输出类型

mydata1.loc[['语文','数学'],['小明']] #输出语文数学行,小明列的数据
  小明
语文 34
数学 68

mydata1.iloc[1:,[0,2]] #输出从第2行到最后一行,第1和第3行对应数据
  小明 小李
数学 68 58
英语 75 86
政治 94 81

同时抽取分部行和列的情况,就是把上述单独抽取行和列的方式合并起来用。抽取整个DataFrame对象则是.loc[:,:]或.iloc[:,:],虽然这么做没啥意义。

总结:

(1)DataFrame对象的.loc[,]和.iloc[,]方法用于抽取数据,.loc[,]用行列的标签名作为参数,.iloc[,]用二维矩阵元素的网格下标作为参数。
(2)两个方法都接受两个参数,第一个是“行标签”或者“矩阵行号”,第二个是“列标签”或者“矩阵列号”。
(3)两种方法当只指定一个输入参数时,都默是跟“行”相关,而“列”则全部被选中。如何行和列都需要指定时,中间用“逗号,”隔开,这非常重要,否则出错。
(4)当需要选中所有行的某几列时,行参数可以省略,列参数需要指定,此时列参数前面必须带上“,:”,形如.loc[:,列参数],.iloc[:,列参数]。
(5).loc[,]和.iloc[,]设置了一个还是两个输入参数,关键看有没有“,”将两个参数分开,且要区分逗号是一个参数的内部逗号,还有用于分隔行列参数的逗号。
(6)对于两个参数的概念区分,.loc['语文','数学']这表示输入了两个参数,行参数是‘语文',列参数是‘数学',对于上面的表格而言这是错的,因为没有叫‘数学'的列,应写为[['语文','数学']],即‘数学'也是行参数的一部分,['语文','数学']整体作为一个行参数,这里的逗号不是用以分隔行和列,仅仅是行list里面的逗号。[['语文','数学']]=[['语文','数学'],]=[['语文','数学'],:],都表示只有一个行参数,列全部选中。

到此这篇关于详解pandas中利用DataFrame对象的.loc[]、.iloc[]方法抽取数据的文章就介绍到这了,更多相关pandas .loc[]、.iloc[]抽取数据内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python中利用sorted()函数排序的简单教程
Apr 27 Python
python下如何查询CS反恐精英的服务器信息
Jan 17 Python
python3实现UDP协议的服务器和客户端
Jun 14 Python
Python开发的HTTP库requests详解
Aug 29 Python
用十张图详解TensorFlow数据读取机制(附代码)
Feb 06 Python
python+selenium实现QQ邮箱自动发送功能
Jan 23 Python
python实现随机漫步方法和原理
Jun 10 Python
Django使用消息提示简单的弹出个对话框实例
Nov 15 Python
python matplotlib包图像配色方案分享
Mar 14 Python
Java Spring项目国际化(i18n)详细方法与实例
Mar 20 Python
解决Pycharm双击图标启动不了的问题(JetBrains全家桶通用)
Aug 07 Python
python装饰器三种装饰模式的简单分析
Sep 04 Python
pandas抽取行列数据的几种方法
Dec 13 #Python
python3.9实现pyinstaller打包python文件成exe
Dec 13 #Python
Pandas中两个dataframe的交集和差集的示例代码
Dec 13 #Python
使用pandas实现筛选出指定列值所对应的行
Dec 13 #Python
Pandas DataFrame求差集的示例代码
Dec 13 #Python
pandas实现导出数据的四种方式
Dec 13 #Python
python绘图pyecharts+pandas的使用详解
Dec 13 #Python
You might like
去除php注释和去除空格函数分享
2014/03/13 PHP
3个PHP多维数组转为一维数组的方法实例
2014/03/13 PHP
PHP查询大量数据内存耗尽问题的解决方法
2016/10/28 PHP
Display SQL Server Login Mode
2007/06/21 Javascript
js 与或运算符 || &amp;&amp; 妙用
2009/12/09 Javascript
javascript中的prototype属性使用说明(函数功能扩展)
2010/08/16 Javascript
浅析JS刷新框架中的其他页面 &amp;&amp; JS刷新窗口方法汇总
2013/07/08 Javascript
javascript 获取模态窗口的滚动位置代码
2013/08/06 Javascript
document.forms[].submit()使用介绍
2014/02/19 Javascript
JavaScript使用cookie记录临时访客信息的方法
2015/04/07 Javascript
jQuery对JSON数据进行排序输出的方法
2015/06/24 Javascript
jQuery实用技巧必备(下)
2015/11/03 Javascript
第四章之BootStrap表单与图片
2016/04/25 Javascript
jQuery基本选择器(实例及表单域value的获取方法)
2016/05/20 Javascript
微信小程序 Image API实例详解
2016/09/30 Javascript
完美实现js选项卡切换效果(一)
2017/03/08 Javascript
jQuery列表检索功能实现代码
2017/07/17 jQuery
js实现加载页面就自动触发超链接的示例
2017/08/31 Javascript
微信小程序实现图片上传功能
2018/05/28 Javascript
JavaScript事件对象深入详解
2018/12/30 Javascript
[13:18]《一刀刀一天》之DOTA全时刻21:详解TI新赛制 A队再露獠牙
2014/06/24 DOTA
Python常用的日期时间处理方法示例
2015/02/08 Python
Python中optparser库用法实例详解
2018/01/26 Python
python通过伪装头部数据抵抗反爬虫的实例
2018/05/07 Python
对numpy中数组转置的求解以及向量内积计算方法
2018/10/31 Python
Python实现分段线性插值
2018/12/17 Python
python ftplib模块使用代码实例
2019/12/31 Python
html5中的一些标签学习(心得)
2016/10/18 HTML / CSS
找到您丢失的钥匙、钱包和手机:Tile
2017/05/19 全球购物
2014年五四青年节演讲比赛方案
2014/04/22 职场文书
2014市国税局对照检查材料思想汇报
2014/09/23 职场文书
体育教师个人工作总结
2015/02/09 职场文书
2015年助理政工师工作总结
2015/05/26 职场文书
2015年学校教科室工作总结
2015/07/20 职场文书
小学生红领巾广播稿
2015/08/19 职场文书
Go语言实现Base64、Base58编码与解码
2021/07/26 Golang