除了基于纯标签和整数之外,Pandas还提供了一种使用运算符进行选择和子集化对象的混合方法。
可以使用 loc()
函数或 iloc()
函数。
在旧版本中使用的是
ix
,现在已经被弃用。
loc
从索引中获取具有特定标签的行(或列)。这里的关键是:标签。标签的理解就是 名字 。iloc
在索引中的特定位置获取行(或列)(因此它只接受整数)。这里的关键是:位置。位置的理解就是排第几个。
Python和NumPy索引运算符 []
和属性运算符 .
。
可以在广泛的用例中快速轻松地访问Pandas数据结构。
然而,由于要访问的数据类型不是预先知道的,所以直接使用标准运算符具有一些优化限制。
对于生产环境的代码,建议利用以下介绍的 Pandas 数据访问方法。
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 -1.095956 b -0.342142 c 1.074890 d -0.296400 e 0.366594 f 0.186325 g 0.832858 h -0.780242 Name: A, dtype: float64
Select all rows for multiple columns, say list []
print (df.loc[:,['A','C']])
A C a -1.095956 -1.091362 b -0.342142 -0.257535 c 1.074890 0.053983 d -0.296400 2.346721 e 0.366594 0.137136 f 0.186325 0.577329 g 0.832858 0.321383 h -0.780242 -1.012206
Select few rows for multiple columns, say list []
:
print (df.loc[['a','b','f','h'],['A','C']])
A C a -1.095956 -1.091362 b -0.342142 -0.257535 f 0.186325 0.577329 h -0.780242 -1.012206
Select all rows for multiple columns, say list []
print (df.loc[:,['A','C']])
A C a -1.095956 -1.091362 b -0.342142 -0.257535 c 1.074890 0.053983 d -0.296400 2.346721 e 0.366594 0.137136 f 0.186325 0.577329 g 0.832858 0.321383 h -0.780242 -1.012206
Select range of rows for all columns:
print (df.loc['a':'h'])
A B C D a -1.095956 0.056121 -1.091362 -1.671746 b -0.342142 0.078310 -0.257535 0.908193 c 1.074890 0.393743 0.053983 -0.085332 d -0.296400 0.822032 2.346721 0.106039 e 0.366594 0.821099 0.137136 0.954978 f 0.186325 -0.206341 0.577329 0.786019 g 0.832858 -0.590331 0.321383 -0.317095 h -0.780242 -0.486854 -1.012206 -2.788565
for getting values with a boolean array :
print (df.loc['a']>0)
A False B True C False D False Name: a, dtype: bool
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 -0.530828 0.083580 0.650759 -0.433312 1 -0.006477 -1.284928 1.775064 0.441437 2 1.014607 -0.725595 -0.243956 0.815095 3 -1.446522 -0.130972 0.541180 0.511666
进行切片:
df.iloc[:4]
A | B | C | D | |
---|---|---|---|---|
0 | -0.530828 | 0.083580 | 0.650759 | -0.433312 |
1 | -0.006477 | -1.284928 | 1.775064 | 0.441437 |
2 | 1.014607 | -0.725595 | -0.243956 | 0.815095 |
3 | -1.446522 | -0.130972 | 0.541180 | 0.511666 |
df.iloc[1:5, 2:4]
C | D | |
---|---|---|
1 | 1.775064 | 0.441437 |
2 | -0.243956 | 0.815095 |
3 | 0.541180 | 0.511666 |
4 | -0.262787 | 0.594519 |
使用列表进行切片:
print (df.iloc[[1, 3, 5], [1, 3]])
print (df.iloc[1:3, :])
print (df.iloc[:,1:3])
B D 1 -1.284928 0.441437 3 -0.130972 0.511666 5 0.143563 -0.709922 A B C D 1 -0.006477 -1.284928 1.775064 0.441437 2 1.014607 -0.725595 -0.243956 0.815095 B C 0 0.083580 0.650759 1 -1.284928 1.775064 2 -0.725595 -0.243956 3 -0.130972 0.541180 4 -0.347882 -0.262787 5 0.143563 0.525276 6 -0.743436 0.996078 7 -0.042807 0.925907
对象 | 索引 | 描述 |
---|---|---|
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.442228 1 0.854063 2 0.737208 3 -0.536969 4 -1.459167 5 0.915912 6 1.324468 7 -0.305434 Name: A, dtype: float64
使用列表方式索引多个列:
print (df[['A','B']])
A B 0 0.442228 0.021379 1 0.854063 0.497131 2 0.737208 0.966723 3 -0.536969 -0.648542 4 -1.459167 1.168579 5 0.915912 -1.180683 6 1.324468 0.920717 7 -0.305434 -0.258048
使用 :
切片索引 :
print (df[2:2])
Empty DataFrame Columns: [A, B, C, D] Index: []
示例如下 :
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.573290 1 2.159448 2 -0.170729 3 -1.504153 4 0.449406 5 0.560662 6 -1.312939 7 0.583914 Name: A, dtype: float64