这是一篇最基础的Pandas用法总结,也方便自己日后进行复习与查询。
上一篇文章总结了Series和DataFrame的创建方法,却忽略了索引这一重要的概念。今天在这篇文章中先来盘点一下Series索引问题。
1. 索引是什么
1.1 认识索引
先用上一篇博文中的方法来创建一个简单的Series。
s1 = pd.Series(['a', 'b', 'c', 'd'])
print(s1)
-----------------------------
[out]:
0 a
1 b
2 c
3 d
dtype: object
我们说过,s1最左侧从0开始的那一列数字就叫索引(index)。每一个索引的右侧对应着一个值(value)。让我们先看看怎样输出所有的index和所有的value。
print(s1.index) # 由于是默认生成的索引,输出就是这个样子
[out]:
RangeIndex(start=0, stop=4, step=1)
-----------------------------------------
print(s1.values) # 输出为Numpy中的数组类型
[out]:
array(['a', 'b', 'c', 'd'], dtype=object)
1.2 自定义索引
当然,我们在创建Series的时候也可以使用index这个参数自己指定索引长什么样子。
s2 = pd.Series(['a', 'b', 'c', 'd'], index = ['one', 'two', 'three', 'four'])
print(s2)
-----------------------------
[out]:
one a
two b
three c
four d
dtype: object
如果此时输出index和value的值:
print(s1.index) # 此时就会输出我们自定义的索引
[out]:
Index(['one', 'two', 'three', 'four'], dtype='object')
-----------------------------
print(s2.values)
[out]:
array(['a', 'b', 'c', 'd'], dtype=object)
2. 索引怎么用
2.1 使用位置索引
整个Series是存在一定位置顺序的,第一个数的位置用0标记,第二个数用1标记,以此类推。因此我们就可以利用这个位置索引来取数。
# 对于s2,输出是一毛一样的
print(s1[2]) # 取一个值
[out]: 'c'
-------------------------------------------
print(s1[[0, 3]]) # 取多个值,用列表括起来
[out]:
0 a
3 d
dtype: object
2.2 使用标签索引
对于s2,我们不仅有位置顺序,还有我们自定义的索引值啊(也可以叫做标签),因此也就诞生了利用标签的索引。
s2['two'] # 取一个值
[out]: 'b'
-----------------------------------------------
s2[['one', 'three']] # 取多个值,用列表括起来
[out]:
one a
three c
dtype: object
2.3 使用切片索引
之前的例子都是使用单个的索引值(即使使用索引列表取多个值,也是对于列表中的index一个一个的找对应的value)。这就像一整个面包,这揪一块吃,那揪一块吃。
但是面包也可以直接切下来一整片吃呀,这就用到了切片的概念,也即直接将Series中一整块连续的数据取出来。
# 对位置索引进行切片
print(s2[1:3]) # 使用位置索引,是不包含最后一个位置3对应的值滴
-----------------------------
[out]:
two b
three c
# 对标签索引进行切片
print(s2['two':'four']) # 使用标签索引,却可以包含最后一个标签对应的值
-----------------------------
[out]:
two b
three c
four d
dtype: object
2.3 使用布尔值索引
s3 = pd.Series([89, 92, 70, 95], index = ['小明', '小红', '小兰', '小花'])
-----------------------------
[out]:
小明 89
小红 92
小兰 70
小花 95
dtype: int64
我们要选出成绩大于90的人。首先需要判断每个人的成绩是否大于90:
print(s3 > 90)
-----------------------------
[out]:
小明 False
小红 True
小兰 False
小花 True
dtype: bool
然后利用得到的这个布尔series就可以提取出所有判断结果为True的部分:
print(s3[s3 > 90])
-----------------------------
[out]:
小红 92
小花 95
dtype: int64