Pandas详解五之下标存取

约定
import pandas as pd
import numpy as  np

下标存取

Series和DataFrame提供了丰富的下标存取方法,除了直接用[ ],还有.loc[ ].iloc[ ].at[ ].iat[ ].ix[ ]等存取方式。

np.random.seed(42)
df1=pd.DataFrame(np.random.randint(1,10,(4,3)),index=['r1','r2','r3','r4'],columns=['c1','c2','c3'])
df1
代码结果:
c1 c2 c3
r1 7 4 8
r2 5 7 3
r3 7 8 5
r4 4 8 8

一、[ ] 操作符

支持以下6种下标对象:

  • 单个列标签

返回Series对象

df1['c1']

代码结果:

r1    7
r2    5
r3    7
r4    4
Name: c1, dtype: int32
  • 多个列标签

返回DataFrame对象

df1[['c1','c3']]
代码结果:
c1 c3
r1 7 8
r2 5 3
r3 7 5
r4 4 8
  • 行索引的整数切片
df1[1:3]
代码结果:
c1 c2 c3
r2 5 7 3
r3 7 8 5
  • 行索引的标签切片

注意包括终止标签

df1['r1':'r2']
代码结果:
c1 c2 c3
r1 7 4 8
r2 5 7 3
  • 布尔数组

df1.c1>5 是一个布尔序列

df1[df1.c1>5]
代码结果:
c1 c2 c3
r1 7 4 8
r3 7 8 5
  • 布尔DataFrame

df1>4 是一个布尔DataFrame对象

df1[df1>4]
代码结果:
c1 c2 c3
r1 7.0 NaN 8.0
r2 5.0 7.0 NaN
r3 7.0 8.0 5.0
r4 NaN 8.0 8.0
  • 注意,类似df1[1]、df1[‘r1’]的位置存取、单个行标签存取是错误的。

二、.loc[ ] 和 .iloc[ ] 存取器

.loc[y]/.iloc[y]:y可以是单个值,也可是多个值(列表),y代表行索引

.loc[y,x]/.iloc[y,x]:y代表行索引,x代表列索引

  • 上面说到了df1[‘r1’]单个行标签存取是错误的,则用.loc[]能可以。
df1.loc['r1']

代码结果:

c1    7
c2    4
c3    8
Name: r1, dtype: int32
  • 获取多行
df1.loc[['r1','r2']]
代码结果:
c1 c2 c3
r1 7 4 8
r2 5 7 3
  • 行、列筛选
df1.loc[['r1','r2'],['c1','c3']]
代码结果:
c1 c3
r1 7 8
r2 5 3
  • .iloc[ ]与.loc[ ]相似,但不同的是,.iloc[ ]使用整数下标:
df1.iloc[2]

代码结果:

c1    7
c2    8
c3    5
Name: r3, dtype: int32
df1.iloc[[2,1]]
代码结果:
c1 c2 c3
r3 7 8 5
r2 5 7 3

三、.ix[ ]存取器

.ix[ ]特点为综合了前面的,可以混用标签、位置下标存取。

同样的,下标中,第一个为行索引,第二个为列索引。

df1.ix['r2',1:3]

代码结果:

c2    7
c3    3
Name: r2, dtype: int32
df1.ix[1:3,['c1','c3']]
代码结果:
c1 c3
r2 5 3
r3 7 5

四、获取单个值

  • .at[ ]和.iat[ ] 能使用标签和整数下标获取单个值。此外,推荐.get_value(),相比前面的更快。
df1.at['r1','c3']

代码结果:

8
df1.iat[0,2]

代码结果:

8
df1.get_value('r1','c3')

代码结果:

8
  • 获取成对标签的单个值
df1.lookup(['r1','r3','r1'],['c3','c2','c2'])

代码结果:

array([8, 8, 4])

五、query()方法

  • 当需要筛选时,我们可能会:
df1[(df1.c1>4)&(df1.c3<5)]
代码结果:
c1 c2 c3
r2 5 7 3
  • 使用query()能简化:
df1.query("c1>4 and c3<5")
代码结果:
c1 c2 c3
r2 5 7 3

谢谢大家的浏览,
希望我的努力能帮助到您,
共勉!

猜你喜欢

转载自blog.csdn.net/weixin_38168620/article/details/79580312
今日推荐