Series下标索引、标签索引、切片索引、布尔索引
Series的values属性可以获取值,Series的索引也可以获取值且更加灵活。Series是dict-like类型,也是list-like类型,可以模仿字典和列表获取数据,比如可以用get方法获取数据。我们习惯用索引获取数据,Series索引可以分为位置下标、标签索引、切片索引、布尔型索引。,。
下标索引
1、列表可以用list[-1],Series下标索引不能用负数,
2、通过type或者Series的dtype属性、dtypes查看下类型。
# -*- coding: utf-8 -*- import pandas as pd import numpy as np # 下标索引 arr = np.random.rand(5) s = pd.Series(arr) print(s) print('------------') print(s[0]) print(s[0].dtype) print(type(s[0]))
0 0.400264 1 0.359603 2 0.608861 3 0.361018 4 0.652181 dtype: float64 ------------ 0.40026367833874676 float64 <class 'numpy.float64'>
标签索引
1、Series的index参数就代表标签索引,标签索引和下标索引同时存在。
2、index最好用字符串否则视觉上不易分辨是下标索引还是标签。
3、选取多个标签需要传入列表,且结果是新的Series
# -*- coding: utf-8 -*- import pandas as pd import numpy as np dic = {'语文':100,'数学':90,'英语':95} s = pd.Series(dic,name='成绩') print(s) print('------------') print(s['语文']) # 语文成绩 print('---------------') print(s[['语文','数学']]) # 传入列表,多个标签
语文 100 数学 90 英语 95 Name: 成绩, dtype: int64 ------------ 100 --------------- 语文 100 数学 90 Name: 成绩, dtype: int64
切片索引
1、用下标就是左闭右开(末端不包含)。
2、用标签索引就是末端包含。
# -*- coding: utf-8 -*- import pandas as pd import numpy as np # 切片索引 s = pd.Series([1,2,3,4,5], index=['a', 'b', 'c', 'd', 'e']) print(s) print('-------') print(s[0:2]) print('--------') print(s['a':'c'])
a 1 b 2 c 3 d 4 e 5 dtype: int64 ------- a 1 b 2 dtype: int64 -------- a 1 b 2 c 3 dtype: int64
布尔型索引(用来筛选数据)
布尔索引就是可以直接传入True、False这种值来选择数据,类型可以是可以是列表(元素是Ture和False)、Series、np数组,只要他们的值是布尔值。多个条件中&代表且,|代表或,~代表取反,多个条件与或非运算需要为每个条件加括号。
Ture和False的个数要和Series元素数相同,Ture代表打印,False代表不打印。实际中通常先把数据进行比较判断后(大于等于小于或者其他)获取布尔值,然后进行传入。具体看下面的例子。
1、直接比较,返回元素为布尔值的Series
2、isnull函数,返回元素为布尔值的Series
3、notnull函数,返回元素为布尔值的Series
先看直接比较:
# -*- coding: utf-8 -*- import pandas as pd d = {'a': 2, 'b': 1, 'c': 0} s = pd.Series(d) print(s>0) # 判断s是否大于0 print(s[s>0]) # 选择s大于0色 print('====================') d2 = {'a': True, 'b': True, 'c': False} s2 = pd.Series(d2) # 也可以直接传入布尔值的Series print(s[s2])
a True b True c False dtype: bool a 2 b 1 dtype: int64 ==================== a 2 b 1 dtype: int64
再看看isnull函数
import pandas as pd d = {'a': 2, 'b': 1} s = pd.Series(d,index=['a','b','c']) print(s.isnull()) # 判断s元素是否缺失 print(s[s.isnull()]) # 打印缺失值
a False b False c True dtype: bool c NaN dtype: float64
再看看notnull函数
# -*- coding: utf-8 -*- import pandas as pd d = {'a': 2, 'b': 1} s = pd.Series(d,index=['a','b','c']) print(s.notnull()) # 判断s元素是否不缺失 print(s[s.notnull()]) # 打印非缺失值
a True b True c False dtype: bool a 2.0 b 1.0 dtype: float64