学学笔记,下标存取操作

ca88会员登录中心 8
ca88会员登录中心

Pandas库中有iloc和loc以及ix能够用来索引数据,收取数据。可是方法壹多也易于变成混淆。上面将种种来组成代码说清里面包车型地铁界别。

​这几个编制程序种类笔者使用的主意是,照着老师课件一步步跟做,遭受难题就记下,能检索化解就寻觅解决,搜不到的去问话,尽量找到解答。

Pandas对数码的收获封装了大气的格局,首要包涵.loc[], .iloc[],
.at[], iat[], .ix[]以及[]操作符,
上面例子重假设显得了如何利用它们。

1. iloc和loc的区别:

简书专栏里有丰富完备的菜鸟上路指南(从下载软件起初),笔者就不一步步搬运了。

df = pd.DataFrame(data=[['Alice', 'girl', 18, 171],
                       ['Bob', 'boy', 19, 172],
                       ['Tom', 'boy', 17, 173],
                       ['Lucy', 'girl', 18, 172]],
                    columns=['Name', 'Sex', 'Age', 'Class'],
                    index=['A', 'B', 'C', 'D'])

iloc主要选择数字来索引数据,而无法接纳字符型的标签来索引数据。而loc则刚好相反,只可以动用字符型标签来索引数据,不可能动用数字来索引数据,然则有破例景况,当数码框dataframe的行标签也许列标签为数字,loc就足以来其来索引。


下边包车型大巴操作都依据以上数据集。
一、 []操作符
ca88会员登录中心,一、单个索引标签:获取标签所在的列,重回3个Series对象。

好,先上代码,先上行标签和列标签都为数字的景色。

Pandas入门

print df['Name'] # 或者 df.Name

output:
A Alice
B Bob
C Tom
D Lucy
Name: Name, dtype: object
import pandas as pd
import numpy as np
a = np.arange(12).reshape(3,4)
print a
>>>
[[ 0 1 2 3]
 [ 4 5 6 7]
 [ 8 9 10 11]]
df = pd.DataFrame(a)
print df
>>>
 0 1 2 3
0 0 1 2 3
1 4 5 6 7
2 8 9 10 11
print df.loc[0]
>>>
0 0
1 1
2 2
3 3
Name: 0, dtype: int32
print df.iloc[0]
0 0
1 1
2 2
3 3
Name: 0, dtype: int32
print df.loc[:,[0,3]]
 0 3
0 0 3
1 4 7
2 8 11
print df.iloc[:,[0,3]]
 0 3
0 0 3
1 4 7
2 8 11

Pandas和NumPy同样,也是在Python基础上支付的另一个工具包,里面有各个工具,化解对应难点。分裂于Numpy只可以存储壹种多少形式,Pandas能够管理两种分裂类型的多寡。

贰、多个索引标签:获取多列,再次回到贰个DataFrame对象。

接下去是把行标签[0, 1, 2]改成[‘a’, ‘b’, ‘c’],则成那样了。

完整来讲,笔者认为Pandas是个注意管理批量表格类数据的强劲工具包,你能够用它实行数量分析,输出结果也都是正统的报表格局,就像一般办公软件做出来的那样(行、列标签清晰明了)。(仅以当下学到的来看,它旗下有个别效率有一点像进级版的excel,以往应该还恐怕有更加的多更有力的拉开)

print df[['Name', 'Age']]

output:
Name Age
A Alice 18
B Bob 19
C Tom 17
D Lucy 18
df.index = ['a','b','c'] 
print df 
>>> 
 0 1 2 3 
a 0 1 2 3 
b 4 5 6 7 
c 8 9 10 11 
print df.loc[0] 
# TypeError: cannot do label indexing on <class 'pandas.core.indexes.base.Index'> with these indexers [0] of <type 'int'> 
print df.iloc[0] 
>>> 
0 0 
1 1 
2 2 
3 3 
Name: a, dtype: int32 
print df.iloc['a'] # TypeError: cannot do positional indexing on <class 'pandas.core.indexes.base.Index'> with these indexers [a] of <type 'str'> 
print df.loc['a'] # 正确 
>>> 
0 0 
1 1 
2 2 
3 3 
Name: a, dtype: int32 

一. 知识点提取

3、整数切块:以大背头下标获取切成块对应的行。

同一地,把列标签[0, 1, 2, 3]改成[‘A’, ‘B, ‘C’, ‘D’],则成这么了。

壹.仿佛Numpy的操作对象是数组,那节主要介绍Pandas下的多个目的,三个是DataFrame(数据框),另一个是Series。

print df[1:3]

output:
Name Sex Age Class
B Bob boy 19 172
C Tom boy 17 173
df.columns = ['A','B','C','D']
print df
>>>
 A B C D
a 0 1 2 3
b 4 5 6 7
c 8 9 10 11
print df.loc[:,'A']
>>>
a 0
b 4
c 8
Name: A, dtype: int32
print df.iloc[:,'A'] # ValueError: Location based indexing can only have [integer, integer slice (START point is INCLUDED, END point is EXCLUDED), listlike of integers, boolean array] types

DataFrame就是三个数据表格

四、标签切块:获取多行。

二.ix是壹种混合索引,字符型标签和整型数据索引都得以。

ca88会员登录中心 1

print df['B':'C'] # 注意:'C'行也会被截取进来

output:
Name Sex Age Class
B Bob boy 19 172
C Tom boy 17 173
print df.ix[0]
>>>
A 0
B 1
C 2
D 3
Name: a, dtype: int32
print df.ix['a']
>>>
A 0
B 1
C 2
D 3
Name: a, dtype: int32
print df.ix[:,0]
>>>
a 0
b 4
c 8
Name: A, dtype: int32
print df.ix[:,'A']
>>>
a 0
b 4
c 8
Name: A, dtype: int32

Series只是一列数据表格,类似于一个一维数组,只是前面多了1列索引

5、布尔数组:获取数组中True对应的行。

上述那篇详谈Pandas中iloc和loc以及ix的差异就是作者分享给我们的全体内容了,希望能给大家一个参照,也意在大家多多扶助脚本之家。

ca88会员登录中心 2

print df['Age'] >= 18 # 这是一个布尔序列

output:
A True
B True
C False
D True
Name: Age, dtype: bool

print df[df['Age'] >= 18]

output:
Name Sex Age Class
A Alice girl 18 171
B Bob boy 19 172
D Lucy girl 18 172

你可能感兴趣的小说:

  • 浅谈pandas中Dataframe的询问方式([], loc, iloc, at,
    iat, ix)

ca88会员登录中心 3

陆、布尔DataFrame:将DataFrame对象中False对应的成分设置为NaN。

2.什么样选择数据

print df == 18 # 这是一个布尔DataFrame对象 
(注意:df不能直接进行非数值比较,如:df == 'Alice' 错误)

output:
Name Sex Age Class
A False False True False
B False False False False
C False False False False
D False False True False

print df[df == 18]

output:
Name Sex Age Class
A NaN NaN 18.0 NaN
B NaN NaN NaN NaN
C NaN NaN NaN NaN
D NaN NaN 18.0 NaN

选列

二、.loc[]、.iloc[]和.ix[]存取器
1、.loc[] (.loc[行索引/切片, 列索引/切片])

[‘列标签’] — 生成series(一列带索引的数)

print df.loc['A'] # 获取'A'行
print df.loc[['A', 'B']] # 获取'A'、'B'两行
print df.loc['A', 'Name'] # 行列定位(获取一个元素)

print df.loc['A':'C', 'Name':'Age'] # 行列切片

output:
Name Sex Age
A Alice girl 18
B Bob boy 19
C Tom boy 17

print df.loc[df['Age'] > 18] # 行过滤

output:
Name Sex Age
B Bob boy 19

print df.loc[df['Age'] >= 18, ['Name', 'Sex', 'Age']] # 行列过滤

output:
Name Sex Age
A Alice girl 18
B Bob boy 19
D Lucy girl 18

print df.loc[:, df.columns.str.contains('e')] # 根据列名过滤

output:
Name Sex Age
A Alice girl 18
B Bob boy 19
C Tom boy 17
D Lucy girl 18

.列标签 — 生成series(1列带索引的数)

2、.iloc[] (与.loc[]看似,只是其选拔的是整数下标)

[[‘列标签’ ,’列标签’]] — 选一列,大概多列,生成DataFrame(表格)

print df.iloc[:, [0, 3]] # 行列过滤:获取所有行, 第一、第四列

output:
Name Class
A Alice 171
B Bob 172
C Tom 173
D Lucy 172

.loc[‘列标签’, ’列标签’, …] —
选一列,或许多列,生成DataFrame(表格)

3、.ix[] 是混用了标签和整数下标,也正是组成了.col[]与.icol[]的功能

.loc[:, [‘列标签’, ’列标签’, …] ] —
选某几列(:代表全部行),生成DataFrame(表格)

print df.ix[:3, ['Name', 'Sex', 'Age']] # 行列过滤

output:
Name Sex Age
A Alice girl 18
B Bob boy 19
C Tom boy 17

.iloc[ : , [‘列索引’, ’列索引’, …] ] —
选某几列(:代表全体行),生成DataFrame(表格)

三、获取单个值
1、.at[]与.iat[] 分别是运用标签和整数下标来博取单个值

注解:以上所指列标签即列名(表头),索引指的是数字(0,壹,2…)。

print df.at['A', 'Name']
print df.iat[0, 0] # 操作结果与上面是一样的 

output:
Alice

选行

2、.get_value()与.at[]类似

例如[2: 5] , 使用行索引(数字),类似于贰维数组切成条,是选拔[
]的无可比拟方式

print df.get_value('B', 'Name')

output:
Bob

.loc[‘行标签’, ’行标签’] —
使用行标签(可用专门的字符缩写,行标签从某种程度上也表示了每行数据重要遵守什么进行区分和排列,例如国家、时期等)

三、.lookup() 获取钦点成分数组

.iloc[ [‘行索引’, ’行索引’, …] ] — 使用索引

print df.lookup(['A','B'], ['Name', 'Age'])

output:
['Alice' 19]

表明:以上所选均为对应行的具备列,故都生成DataFrame(表格)。

四、利用query()方法筛选数据

选行和列

print df.query('Age >= 19 and Class == 172') 
# 其实上面操作等价于: df[(df.Age >= 19) & (df.Class == 172)]

output:
Name Sex Age Class
B Bob boy 19 172

query()的参数是一个运算表达式字符串,使用not、and、or关键字进行布尔运算,表达式中的变量名表示与其对应的列,表达式中还支持变量的使用:
age = 19
print df.query('Age >= @age and Class == 172')

.loc[ [‘行标签’, ’行标签’, …], [‘列标签’,’列标签’, …] ]  —
某几行某几列,标签是列名(多为字符)

.iloc[ [‘行索引’, ’行索引’, …], [‘列索引’,’列索引’, …] ]  —
某几行某几列,索引是数字

总结:.loc用标签,.iloc用索引

布尔索引筛选

布尔索引的选择和Numpy2维数组看似,即先选用判别规范获得三个Boolean
Series,然后以此为筛子,筛选对应知足条件(True)的数额。

这里应注意,就算『筛子』是Series类型,不过筛选之后回来的数目,则是跟原多少一致的,即DataFrame重返DataFrame,Series重返Series。

2. 作业难点计算:

一、or在此间是漏洞百出用法,要用 | ,同理 &。

二、选取『: 』接纳数据时,那部分不加[ ],直接写。

ca88会员登录中心 4

三、使用布尔索引时[ ]内的口径推断外,无需再加()

ca88会员登录中心 5

四、多数语句素不相识,猜导致不会利用,比方isin,Python的语法情势确实非常轻易直接,纵然是代码,但是感到是精简版的人类语言表明式,一点也不拐弯抹角,比方那一个isin。

ca88会员登录中心 6

5、不别的设变量,直接用[ ]套[
]的方式也能出结果,但是轻便失误,比方括号对不上,或是长句子不便于检查错误。胜在一句话解决,少写一行代码。到底哪一种艺术更适用,需求未来采纳中再感受。

ca88会员登录中心 7

ca88会员登录中心 8

三. 体会:

那部分内容看起来相比较碎,可是实际宗旨就讲了三个,即数据的取舍。对待这种特别零散的东西,最佳的方法正是友好归咎计算,然后对应虚弱的地方,演练演习再练习。

将散碎的事物穿成串固然略繁琐,但是稳步捋顺的经过也是跳出那些,逐步给本人树立多少个框架的历程,不然,脑袋里越糊更加的多就越想吐弃。不识嵩山真面目,只缘身在此山中,大概多少这些意思。

从上往下看就能够开掘,俯视图往往藏奥义。


Python笔记种类(不只是笔记):

Python 学习笔记 Lesson
0四

Python 学习笔记 Lesson 0二 &
0三

Python 学习笔记
Lesson0一

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图