Pandas 索引和选择数据,Python和NumPy索引运算符"[]"
和属性运算符"."
可以快速轻松地访问Pandas数据结构。由于要访问的数据类型不是预先知道的,直接使用标准运算符具有一些限制。
Pandas支持三种索引方法:
编号 | 索引 | 描述 |
---|---|---|
1 | .loc() |
基于标签 |
2 | .iloc() |
基于整数 |
3 | .ix() |
基于标签和整数,在0.20.0中已经不建议使用了 |
.loc()
.loc()
主要基于标签(label)的,包括行标签(index)和列标签(colums),即行名称和列名称,可以使用def.loc[index_name, col_name]
选择指定位置的数据,主要用法有:
- 单个标量标签,如果
.loc
中只有单个标签,那么选择的是一行。如:df.loc['a']
选择的是 index 为’a’的一样。 - 标签列表,如:
df.loc[['a', 'b', 'c']]
,同样只选择行。 - 切片对象,与通常的 python 切片不同,在最终选择的数据数据中包含切片的 start 和 stop。如:
df.loc['c' : 'h']
即包含’c’行,也包含’h’行。 - 布尔数组,用于筛选符合某些条件的行,如:
df.loc[df.A>0.5]
筛选出所有’A’列大于0.5的行。
示例1
执行上面示例代码,得到以下结果:
示例2
执行上面示例代码,得到以下结果:
示例3
执行上面示例代码,得到以下结果:
示例4
执行上面示例代码,得到以下结果:
示例5
执行上面示例代码,得到以下结果:
.iloc()
.iloc()
是基于整数的索引,利用元素在各个轴上的索引序号进行选择,序号超过范围产生IndexError
,切片时允许序号超过范围。
各种访问方式如下 –
- 整数,与
.loc
相同,如果只使用一个维度,则对行选择,小标从 0 开始。如:df.iloc[5]
,选择第 6 行。 - 整数列表或者数组,如
df.iloc[[5, 1, 7]]
,选择第 6 行, 第 2 行, 第 8 行。 - 元素为整数的切片操作,与
.loc
不同,这里下标为 stop 的数据不被选择。如:df.iloc[0:3]
, 只包含 0,1,2行,不包含第 3 行。 - 使用布尔数组进行筛选,如
df.iloc[np.array(df.A>0.5)]
,df.iloc[list(df.A>0.5)]
。
注意使用布尔数组进行筛选时,可以使用 list 或者 array,使用 Series会出错,
NotImplementedError
和ValueError
,前者是 Series 的 index 与待切片 DataFrame的index 不同时报错,后置 index 相同时报错。
与.loc
使用布尔数组,可以使用 list, array, 也可以使用Series,使用Series时 index需要一致,否则会报IndexError
。
示例1
执行上面示例代码,得到以下结果 –
示例2
执行上面示例代码,得到以下结果 –
示例3
执行上面示例代码,得到以下结果 –
.ix()
除了基于纯标签和整数之外,Pandas还提供了一种使用.ix()
运算符进行选择和子集化对象的混合方法。在0.20.0中已经不建议使用了,本章只做简单介绍。
示例1
执行上面示例代码,得到以下结果 –
示例2
执行上面示例代码,得到以下结果 –
切片操作
[]
操作只能输入一个维度,不能用逗号隔开输入两个维度。
执行上面示例代码,得到以下结果 –
.loc
和 .iloc
只输入一维时选择的行,而[]
选择的是列,并且必须使用列名。
示例1
执行上面示例代码,得到以下结果 –
示例2
执行上面示例代码,得到以下结果 –
示例3
执行上面示例代码,得到以下结果 –
属性访问.
可以使用属性运算符.
来选择列。
示例
执行上面示例代码,得到以下结果 –
学习笔记
loc
和.iloc
支持可调用函数
示例1
执行上面示例代码,得到以下结果 –
示例2
执行上面示例代码,得到以下结果 –