pandas loc iloc ix用法详细分析
作者:bitcarmanlee 发布时间:2021-08-31 20:16:53
1.什么是label
pandas处理数据时,我们会经常看到dataframe结构使用loc, iloc, ix等方法。那么这些方法到底有啥区别,下面我们来进行详细分析。
首先我们先明确一点,这几个方法都可以用来过滤dataframe的行列。他们的不同,主要还是使用方式的不同。
在分析之前,我们先来明确一下标签label的概念。为了方便看得更清楚,先构造一个数据集
import pandas as pd
def test_loc():
name = ['n1', 'n2', 'n3', 'n4', 'n5', 'n6']
age = [1, 2, 3, 4, 5, 6]
country = ['Chi', 'Chi', 'Ame', 'Ame', 'Jp', 'Koe']
city = ['bj', 'sh', 'ny', 'ny', 'tok', 'se']
data = pd.DataFrame({'name': name, 'age': age, 'country': country, 'city': city})
# label
print(data)
name age country city
0 n1 1 Chi bj
1 n2 2 Chi sh
2 n3 3 Ame ny
3 n4 4 Ame ny
4 n5 5 Jp tok
5 n6 6 Koe se
上面的data,0,1,2,3,4,5为索引,就是我们的行标签。name ,age,country,city为列名,则是我们的列标签。
2.loc用法
我们先直接上结论:loc可以基于行列标签对数据进行筛选。
下面通过实验来说明。
def test_loc():
name = ['n1', 'n2', 'n3', 'n4', 'n5', 'n6']
age = [1, 2, 3, 4, 5, 6]
country = ['Chi', 'Chi', 'Ame', 'Ame', 'Jp', 'Koe']
city = ['bj', 'sh', 'ny', 'ny', 'tok', 'se']
data = pd.DataFrame({'name': name, 'age': age, 'country': country, 'city': city})
# 取前几行
print(data.loc[[0, 1, 2]])
print()
print(data.loc[0:2])
print()
# 取某几列
print(data.loc[:, ['name', 'age', 'city']])
print()
# 取几行几列
print(data.loc[0:2,['name', 'age', 'city']])
print()
2.1 选择行
loc的整体语法为loc[rows, columns]。逗号前面部分为选择的行,后面部分为选择的列,":"表示全选。
loc[0:2]与loc[[0, 1, 2]]的效果一致,都是表示选取前3行,可以认为此时是通过行标签选择数据。
2.2 选择列
实际操作中,最常见的需求就是选择某几列而不是所有数据。loc[:, [‘name’, ‘age’, ‘city’]]就是选择散列,逗号前面的:表示选择所有行。
2.3 选择指定的行列
data.loc[0:2,[‘name’, ‘age’, ‘city’]]这种用法,意思就是选择前三行的name,age,city这三列。
2.4 loc小结
1.就像我们一开始提到的,loc是基于数据行列标签对数据进行筛选。
2.针对行标签选择时,如果index是默认的整数序列,选择的时候包括了末端的一行。
3.":"表示选择所有行或者所有列。
3.iloc用法
直接上结论:iloc与loc的不同在于,loc基于数据标签进行筛选,而iloc基于位置进行数据筛选,i可以认为是integer,即在loc的基础上,用integer整数当作"索引"
看个例子
def test_iloc():
name = ['n1', 'n2', 'n3', 'n4', 'n5', 'n6']
age = [1, 2, 3, 4, 5, 6]
country = ['Chi', 'Chi', 'Ame', 'Ame', 'Jp', 'Koe']
city = ['bj', 'sh', 'ny', 'ny', 'tok', 'se']
data = pd.DataFrame({'name': name, 'age': age, 'country': country, 'city': city})
# iloc的索引,不包含最后一个
print(data.iloc[0:2])
print()
#
print(data.iloc[:, 0:2])
print()
print(data.iloc[:,[0, 1, 3]])
print()
# print(data.iloc[:, ['name', 'city']])
# IndexError: .iloc requires numeric indexers, got ['name' 'city']
最后输出为:
name age country city
0 n1 1 Chi bj
1 n2 2 Chi shname age
0 n1 1
1 n2 2
2 n3 3
3 n4 4
4 n5 5
5 n6 6name age city
0 n1 1 bj
1 n2 2 sh
2 n3 3 ny
3 n4 4 ny
4 n5 5 tok
5 n6 6 se
iloc[0:2],表示选择前两行。注意在iloc中,末端那行不包括。因为起始索引是0,所以iloc[0:2]选择的是第0行与第1行。
data.iloc[:, 0:2]表示选择前两列,data.iloc[:,[0, 1, 3]]表示选择第0,1,3列。
如果我们尝试用列名筛选数据,data.iloc[:, [‘name’, ‘city’]]
代码会报错
IndexError: .iloc requires numeric indexers, got ['name' 'city']
上面的错误信息就很明确的告诉了我们,iloc方法需要numeric indexers。
4.ix
最后一个ix,是历史版本的用法。ix的作用,现在用loc,iloc基本都能实现,所以ix也基本上被loc,iloc所代替,现在官方不再推荐使用。
来源:https://blog.csdn.net/bitcarmanlee/article/details/128611846
猜你喜欢
- 使用诸如Lock、RLock、Semphore之类的锁原语时,必须多加小心,锁的错误使用很容易导致死锁或相互竞争。依赖锁的代码应该保证当出现
- ajax.html <html><head> <met
- 在计算机和信息技术领域里 I/O 这个术语表示输入 / 输出 ( 英语:Input / Output ) ,通常指数据在存储器(内部和外部)
- 废话不多说,直接上代码吧!# -*- coding: utf-8 -*-import cv2import numpy as np# ----
- ADODB.Stream在ASP编程中往往用于无组件上传,并且可以指定文件编码,可以应对各种不同的需要。但是在使用ADODB.Stream过
- 效果图from wxpyimport *import requestsfrom datetimeimport datetimeimport
- 即使MyISAM表格式非常可靠(SQL语句对表做的所有改变在语句返回之前被写下),如果下列任何事件发生,你依然可以获得损坏的表:&m
- 什么是品牌的视觉传达品牌,这个熟悉而又陌生的名词,有时总会让人产生误解。品牌很广,广到一个意会颇深的战略发展理念;品牌很小,小到一个清晰可见
- Tracert 命令跟踪路由原理是IP路由每经过一个路由节点TTL值会减一,假设TTL值=0时数据包还没有到达目标主机,那么该路由则会回复给
- 1、现象a.用localhost访问,正常b.用IP地址访问,则出现403错误2、分析a.怀疑是ACL问题,设置Everyone为完全控制,
- 我们在使用ASP 内置的ADO组件进行数据库编程时,通常是在脚本的开头打开一个连接,并在脚本的最后关闭它,但是就较大脚本而言,在多
- 秉承MVC架构的思想,CI中的所有控制器都需要经过单点入口文件index.php(默认)来加载调用。也就是说,在默认情况下,所有CI开发项目
- 1.怎么样查看数据库字符集 [A]数据库服务器字符集select * from nls_database_parameters,其来源于pr
- 最近学习python并发,于是对多进程、多线程、异步和协程做了个总结。一、多线程多线程就是允许一个进程内存在多个控制权,以便让多个函数同时处
- 登录与注册两个按钮似乎天生就应该是排在一起的,就像很多地方的“确定”与“取消”一样,甚至排在一起的意义远远强于后者。于是长期以来,用户们也形
- SQL Server数据库的六个实用技巧:(一)挂起操作在安装Sql或sp补丁的时候系统提示之前有挂起的安装操作,要求重启,这里往往重启无用
- sql语句中默认是不区分大小写的,所以语句: Sql代码 SELECT * FROM RecEngineBizInfo WHERE RecE
- 本文实例为大家分享了python创建tcp服务端和客户端的具体代码,供大家参考,具体内容如下1.服务端serverfrom socket i
- 在数据库中,字符型的数据是最多的,可以占到整个数据库的80%以上。为此正确处理字符型的数据,对于提高数据库的性能有很大的作用。在字符型数据中
- 耦合两个或以上的体系或两种运动形式间相互作用而彼此影响以至于联合起来的现象。在软件工程中,对象之间的耦合度就是对象之间的依赖性,对象之间的耦