>>> from env_helper import info; info()
页面更新时间: 2024-01-20 20:51:35
运行环境:
Linux发行版本: Debian GNU/Linux 12 (bookworm)
操作系统内核: Linux-6.1.0-17-amd64-x86_64-with-glibc2.36
Python版本: 3.11.2
7.4. Pandas索引和选择数据¶
除了基于纯标签和整数之外,Pandas还提供了一种使用运算符进行选择和子集化对象的混合方法。
可以使用 loc()
函数或 iloc()
函数。
在旧版本中使用的是
ix
,现在已经被弃用。
loc
从索引中获取具有特定标签的行(或列)。这里的关键是:标签。标签的理解就是 名字 。iloc
在索引中的特定位置获取行(或列)(因此它只接受整数)。这里的关键是:位置。位置的理解就是排第几个。
Python和NumPy索引运算符 []
和属性运算符 .
。
可以在广泛的用例中快速轻松地访问Pandas数据结构。
然而,由于要访问的数据类型不是预先知道的,所以直接使用标准运算符具有一些优化限制。
对于生产环境的代码,建议利用以下介绍的 Pandas 数据访问方法。
7.4.1. .loc()
¶
Pandas提供了各种方法来完成基于标签的索引。 切片时,也包括起始边界。整数是有效的标签,但它们是指标签而不是位置。
.loc()
具有多种访问方式,如 :
单个标量标签
标签列表
切片对象
一个布尔数组
loc()
需要两个单/列表/范围运算符,用 ,
分隔。第一个表示行,第二个表示列。
>>> import pandas as pd
>>> import numpy as np
>>>
>>> df = pd.DataFrame(np.random.randn(8, 4),
>>> index = ['a','b','c','d','e','f','g','h'],
>>> columns = ['A', 'B', 'C', 'D'])
select all rows for a specific column:
>>> df.loc[:,'A']
a -0.003620
b -0.948576
c 1.336592
d -1.858504
e -0.047024
f -0.948449
g -0.460432
h 1.583392
Name: A, dtype: float64
Select all rows for multiple columns, say list []
>>> print (df.loc[:,['A','C']])
A C
a -0.003620 -0.407102
b -0.948576 -0.386523
c 1.336592 -0.367189
d -1.858504 -0.186412
e -0.047024 -1.502742
f -0.948449 -1.506808
g -0.460432 -0.200745
h 1.583392 0.927126
Select few rows for multiple columns, say list []
:
>>> print (df.loc[['a','b','f','h'],['A','C']])
A C
a -0.003620 -0.407102
b -0.948576 -0.386523
f -0.948449 -1.506808
h 1.583392 0.927126
Select all rows for multiple columns, say list []
>>> print (df.loc[:,['A','C']])
A C
a -0.003620 -0.407102
b -0.948576 -0.386523
c 1.336592 -0.367189
d -1.858504 -0.186412
e -0.047024 -1.502742
f -0.948449 -1.506808
g -0.460432 -0.200745
h 1.583392 0.927126
Select range of rows for all columns:
>>> print (df.loc['a':'h'])
A B C D
a -0.003620 1.013847 -0.407102 -1.170358
b -0.948576 -1.204101 -0.386523 -0.026203
c 1.336592 -0.795746 -0.367189 -0.380285
d -1.858504 -0.424469 -0.186412 -0.803915
e -0.047024 0.110915 -1.502742 1.161166
f -0.948449 0.908346 -1.506808 -0.516526
g -0.460432 -2.170456 -0.200745 -2.704455
h 1.583392 -0.883348 0.927126 0.546050
for getting values with a boolean array :
>>> print (df.loc['a']>0)
A False
B True
C False
D False
Name: a, dtype: bool
7.4.2. .iloc()
¶
Pandas提供了各种方法,以获得纯整数索引。像 Python 和 NumPy
一样,第一个位置是基于 0
的索引。
各种访问方式如下 -
整数
整数列表
系列值
>>> import pandas as pd
>>> import numpy as np
>>>
>>> df = pd.DataFrame(np.random.randn(8, 4), columns = ['A', 'B', 'C', 'D'])
从特定列中选择所有行:
>>> print (df.iloc[:4])
A B C D
0 1.663714 0.603110 0.550256 -1.041392
1 1.735845 -1.258820 -0.078011 1.327377
2 0.942490 1.286213 1.809651 -0.137577
3 -0.350447 -0.712508 -0.250432 0.676848
进行切片:
>>> df.iloc[:4]
A | B | C | D | |
---|---|---|---|---|
0 | 1.663714 | 0.603110 | 0.550256 | -1.041392 |
1 | 1.735845 | -1.258820 | -0.078011 | 1.327377 |
2 | 0.942490 | 1.286213 | 1.809651 | -0.137577 |
3 | -0.350447 | -0.712508 | -0.250432 | 0.676848 |
>>> df.iloc[1:5, 2:4]
C | D | |
---|---|---|
1 | -0.078011 | 1.327377 |
2 | 1.809651 | -0.137577 |
3 | -0.250432 | 0.676848 |
4 | 0.224099 | -0.476229 |
使用列表进行切片:
>>>
>>> print (df.iloc[[1, 3, 5], [1, 3]])
>>> print (df.iloc[1:3, :])
>>> print (df.iloc[:,1:3])
B D
1 -1.258820 1.327377
3 -0.712508 0.676848
5 1.066648 0.371840
A B C D
1 1.735845 -1.258820 -0.078011 1.327377
2 0.942490 1.286213 1.809651 -0.137577
B C
0 0.603110 0.550256
1 -1.258820 -0.078011
2 1.286213 1.809651
3 -0.712508 -0.250432
4 -1.229913 0.224099
5 1.066648 0.224111
6 0.090186 0.955380
7 0.867101 1.081663
7.4.3. 使用索引¶
使用多轴索引从Pandas对象获取值可使用以下符号 -
对象 | 索引 | 描述 |
---|---|---|
Series | s.loc[indexer] | 标量值 |
DataFrame | df.loc[row_index,col_index] | 标量对象 |
Panel | p.loc[item_index,major_index, minor_index] | p.loc[item_index,major_index, minor_index] |
注意 : .iloc()
和 .ix()
应用相同的索引选项和返回值。
现在来看看如何在DataFrame对象上执行每个操作。这里使用基本索引运算符[] -
>>> import pandas as pd
>>> import numpy as np
>>> df = pd.DataFrame(np.random.randn(8, 4), columns = ['A', 'B', 'C', 'D'])
>>> print (df['A'])
0 0.140305
1 1.453873
2 -2.319895
3 -0.262825
4 1.555486
5 1.154312
6 -0.268970
7 -0.943927
Name: A, dtype: float64
使用列表方式索引多个列:
>>> print (df[['A','B']])
A B
0 0.140305 -0.291825
1 1.453873 1.703303
2 -2.319895 -0.658452
3 -0.262825 0.830273
4 1.555486 0.354612
5 1.154312 0.294191
6 -0.268970 -0.597697
7 -0.943927 -0.213384
使用 :
切片索引 :
>>> print (df[2:2])
Empty DataFrame
Columns: [A, B, C, D]
Index: []
7.4.4. 属性访问¶
可以使用属性运算符 .
来选择列。
示例如下 :
>>> import pandas as pd
>>> import numpy as np
>>> df = pd.DataFrame(np.random.randn(8, 4), columns = ['A', 'B', 'C', 'D'])
>>>
>>> print (df.A)
0 2.342803
1 2.336214
2 1.781837
3 0.660118
4 0.171099
5 -1.034442
6 0.182111
7 -0.680993
Name: A, dtype: float64