1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > pandas loc iloc ix用法详解

pandas loc iloc ix用法详解

时间:2022-05-08 09:46:39

相关推荐

pandas loc iloc ix用法详解

1.什么是label

pandas处理数据时,我们会经常看到dataframe结构使用loc, iloc, ix等方法。那么这些方法到底有啥区别,下面我们来进行详细分析。

首先我们先明确一点,这几个方法都可以用来过滤dataframe的行列。他们的不同,主要还是使用方式的不同。

在分析之前,我们先来明确一下标签label的概念。为了方便看得更清楚,先构造一个数据集

import pandas as pddef 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})# labelprint(data)

name age country city0 n1 1Chi bj1 n2 2Chi sh2 n3 3Ame ny3 n4 4Ame ny4 n5 5Jp tok5 n6 6Koe 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 city0 n1 1Chi bj1 n2 2Chi shname age0 n1 11 n2 22 n3 33 n4 44 n5 55 n6 6name age city0 n1 1 bj1 n2 2 sh2 n3 3 ny3 n4 4 ny4 n5 5 tok5 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所代替,现在官方不再推荐使用。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。