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


猜你喜欢
- 本教程使用的是python 3 和django为事例打开pycharmfile -> new
- 可以使用 XDR(简化 XML-Data)架构创建关系数据的 XML 视图。然后可以使用 XPath 查询来查询这些视图。这类似于使用 CR
- pyecharts显示数据为百分比的柱状图pyecharts是做数据分析的好帮手,柱状图比较简单,网站例子不够多,一般柱状图就是直接传两组数
- 在PyQt中没有直接提供左键双击的判断方法,需要自己实现,其思路主要如下所示:1、起动一个定时器,判断在指定的时间之内,点击次数
- [sql] -- ===================【创建存储过程】===================== USE [Message
- 我个人感觉数据库这方面对于程序员来说很重要,无论是对于JAVA程序员还是DOTNET程序员以及其他编程人员来说都是必须掌握的。为了帮助大家更
- 工欲善其事必先利其器,Pycharm 是最受欢迎的Python开发工具,它提供的功能非常强大,是构建大型项目的理想工具之一,如果能挖掘出里面
- 最近在使用Python开发系统,需连接mysql数据库,我用的是Python3连接MySQL8.0,其中老是报错以下问题:网上给了各种各样的
- 1. MySQL Connector1.1 创建连接import mysql.connector config={ "
- form 表单中的button按钮<button>提交</button> :放在form表单中,会有一个提交事件,会
- Options Indexes FollowSymLinks ExecCGI  
- 直接赋值: 对象的引用,也就是给对象起别名浅拷贝: 拷贝父对象,但是不会拷贝对象的内部的子对象。深拷贝: 拷贝父对象. 以及其内部的子对象在
- 本文实例讲述了Python企业编码生成系统之主程序模块。分享给大家供大家参考,具体如下:一 点睛主程序模块包括三部分:1 主程序初始化2 主
- 前提准备:1.使用python requests模块2.了解json3.zabbix api的具体调用建议先浏览一下官网先上代码:impor
- 本文实例讲述了Django rest framework工具包简单用法。分享给大家供大家参考,具体如下:Django rest framew
- 前言做网络爬虫的同学肯定见过各种各样的验证码,比较高级的有滑动、点选等样式,看起来好像挺复杂的,但实际上它们的核心原理还是还是很清晰的,本文
- 本文实例为大家分享了利用python和OpenCV实现图像拼接,供大家参考,具体内容如下python+OpenCV实现image stitc
- 本文实例讲述了Python 继承,重写,super()调用父类方法操作。分享给大家供大家参考,具体如下:demo.py(继承,重写,supe
- 1 界面美化1.1 Chinese (Simplified) | 简体中文1.2 vscode-icons | 美化图标1.3 Bracke
- 哈喽,今天给大家分享一篇Django+Celery实现动态配置定时任务,因为最近也是无意间看到一位大佬关于这块的文章,然后自己觉得不错,也想