Pandas中loc,iloc与直接切片的区别
最近使用pandas,一直搞不清楚其中几种切片方法的区别,今天专门看了一下。
0. 把Series的行index或Dataframe的列名直接当做属性来索引。
如:
s.index_name df.column_name
但是这种方法索引的名字可能会与自带的方法冲突,比如min,max等等,所以可能会失效。另外,在新版本中,这种索引方法不能作为左值。
1. df[]直接索引
- 直接索引索引的是列,方口号里面的内容一般是列索引名。也可以接受一个列名组成的list来接受多个列名。
 
df['A']
df[['A', 'B']]
如果要交换两列,直接用这样的方法是不对的:
df.loc[:,['B', 'A']] = df[['A', 'B']]
这是因为pandas默认在赋值的时候回匹配列名,这里面的AB和BA实际上没有区别。如果想要交换两列的话,应该使用AB两列的值作为右值,这样就不带列索引名了。
df.loc[:,['B', 'A']] = df[['A', 'B']].values
- 索引slice对象,索引的是行,因为这样做更加符合常理
 
df=pd.DataFrame(np.arange(16).reshape((4,4)),index=list(range(4)),columns=['a','b','c','d']) df
Out[4]:
a b c d
0 0 1 2 3
1 4 5 6 7
2 8 9 10 11
3 12 13 14 15
df[0:1]
Out[6]:
a b c d
0 0 1 2 3
这里如果是Series,就可以使用单独的数字来索引;如果是Dataframe,就不可以,需要使用Python的slice对象形式的来索引。
2. loc,基于label的索引
由于pandas处理的是具有标签的表格对象,所以设计一套基于标签的索引方法是必要的,这就是loc
loc索引要注意的是:
- loc是基于标签的,如果给出的索引中包含没有的标签,会报错
 - loc索引的开闭区间机制和Python传统的不同,而是与MATLAB类似的双侧闭区间,即只要出现,就会包含该标签
 - 数字也可以放入loc中当做索引,但是这时数字指的是标签而不是 位置
 
df.loc[0:3,'a':'c']
Out[9]:
a b c
0 0 1 2
1 4 5 6
2 8 9 10
3 12 13 14
注意上面的0:3实际上并不是数字,而是行的label。
loc也可以接受布尔索引来取出其中的一些行
df.loc[df.loc[:,'a']>1]
3. iloc,完全基于位置的索引
iloc的用法完全和numpy中的数字索引一样,开闭区间的逻辑也和Python是相同的。
要注意的是,如果iloc方括号中直接给定一个数字或者一个slice的话,默认索引的是行。其中数字的情况会返回一个Series
df.loc[:,df.loc[1]>1]
Out[21]:
a b c d
0 0 1 2 3
1 4 5 6 7
2 8 9 10 11
3 12 13 14 15 df.loc[:,df.loc[1]>4]
Out[22]:
b c d
0 1 2 3
1 5 6 7
2 9 10 11
3 13 14 15 df.iloc[1]
Out[23]:
a 4
b 5
c 6
d 7
Name: 1, dtype: int32 type(df.iloc[1])
Out[24]: pandas.core.series.Series
Pandas中loc,iloc与直接切片的区别的更多相关文章
- python pandas 中 loc & iloc 用法区别
		
转自:https://blog.csdn.net/qq_21840201/article/details/80725433 ### 随机生DataFrame 类型数据import pandas as ...
 - Pandas:loc iloc ix用法
		
参考:Pandas中关于 loc \ iloc \ ix 用法的理解 相同点 使用形式都是 df.xxx[ para1 , para2 ] #xxx表示loc iloc ix#df表示一个DataFr ...
 - Pandas中Loc用法总结
		
摘自:http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.loc.html 具体用法,假设数据源为: > ...
 - [译]pandas中的iloc loc的区别?
		
loc 从特定的 gets rows (or columns) with particular labels from the index. iloc gets rows (or columns) a ...
 - pandas中Loc vs. iloc vs. ix vs. at vs. iat?
		
loc: only work on indexiloc: work on positionix: You can get data from dataframe without it being in ...
 - Pandas的 loc iloc ix 区别
		
先看代码: In [46]: import pandas as pd In [47]: data = [[1,2,3],[4,5,6]] In [48]: index = [0,1] In [49]: ...
 - pandas 定位 loc,iloc,ix
		
In [114]: df Out[114]: A B C D 2018-06-30 0.318501 0.613145 0.485612 0.918663 2018-07-31 0.614796 0. ...
 - pandas的loc, iloc, ix的操作
		
参考: https://blog.csdn.net/xw_classmate/article/details/51333646 1. loc——通过行标签索引行数据 2. iloc——通过行号获取行数 ...
 - Pandas之loc\iloc\ix
		
---------------------------------------------------------------------------------------------------- ...
 
随机推荐
- PostgreSQL-8-数据合并
			
-- 1.JOIN与UNION的区别详解 CREATE TABLE t1(id int,value1 text); ,,,'c'); -- 创建表格t1 CREATE TABLE t2(id int, ...
 - Django quick tutorial
			
--第一部分,快速开始-- 01. Django简介
 - Codeforces 1142C(转化、凸包)
			
可以变换坐标:x' = x, y' = y - x ^ 2,如此之后可得线性函数x' * b + c = y',可以发现两点连边为抛物线,而其他点都在这条线下方才满足题意,故而求一个上凸壳即可. #i ...
 - python之序列化json模块与pickle模块(待补充)
			
一.json是所有语言都通用的一种序列化格式 只支持 : 列表,字典字符串,数字,且字典的key必须是字符串 ''' 1. dumps , loads 在内存中做数据转换: dumps : 数据类型 ...
 - Codeforces Round #202 (Div. 1)  A. Mafia   推公式 + 二分答案
			
http://codeforces.com/problemset/problem/348/A A. Mafia time limit per test 2 seconds memory limit p ...
 - git stash暂存当前正在进行的工作
			
git stash 可用来暂存当前正在进行的工作, 比如想pull 最新代码, 又不想加新commit, 或者另外一种情况,为了fix 一个紧急的bug, 先stash, 使返回到自己上一个comm ...
 - game 竞赛图 缩环
			
[问题背景] zhx 和他的妹子(们)做游戏. [问题描述] 考虑 N 个人玩一个游戏, 任意两个人之间进行一场游戏 (共 N*(N-)/ 场) , 且每场一定能分出胜负. 现在,你需要在其中找到三个 ...
 - kafka系列一:单节点伪分布式集群搭建
			
Kafka集群搭建分为单节点的伪分布式集群和多节点的分布式集群两种,首先来看一下单节点伪分布式集群安装.单节点伪分布式集群是指集群由一台ZooKeeper服务器和一台Kafka broker服务器组成 ...
 - 浅谈Hibernate中的三种数据状态
			
Hibernate中的三种数据状态:临时.持久.游离 1.临时态(瞬时态) 不存在于session中,也不存在于数据库中的数据,被称为临时态. 数据库中没有数据与之对应,超过作用域会被JVM垃圾回收器 ...
 - java 删除字符串最后一个字符的几种方法
			
偶然看到的,记录一下,以免忘记 字符串:string s = "1,2,3,4,5," 目标:删除最后一个 "," 方法: 1.用的最多的是Substri ...