Series是一种类似于一维数组的对象,由以下两部分组成:
values:一组数据
index:相关的数据索引标签
Series的创建
由列表或numpy数组创建 默认索引为0到n-1的整数型索引
import pandas as pd import numpy as np from pandas import Series,DataFrame s1 = Series([1,2,3,4,5]) s1 n1 = np.array([1,2,3,4,5]) s2 = Series(n1) s2 s3 = Series(data=n1, index=['A','B','C','D','E']) s3 l1 = np.array([1,2,3,4,5]) s1 = Series(data=l1) s1[0] = 100 s1
#通过字典创建数组 dic = { 'name':'zhangsanfeng', 'age':'108', 'addr':'wudangshan', } #字典生成的Series是有序的 按键名排序 s = Series(data=dic) s
练习:
创建一个Series,命名为s1:
语文 150
数学 150
英语 150
理综 300
dic1 = { '语文': 150, '数学': 150, '英语': 150, '理综': 300, } s = Series(data=dic1) s data = np.array([150,150,150,300]) index = ['语文','数学','英语','理综'] s1 = Series(data=data,index=index) s1
Series的索引和切片
s1['语文'] s1[0] #推荐使用.loc() s1.loc['语文'] s1.loc[['语文','数学']] s1.iloc[[0,1]]
s = Series(data=np.random.randint(0,100,size=10)) s s[0:3] s.loc[2:6] # 包括右边 标签索引将会将切片末端包含进去练习2
使用多种方法对练习1创建的Series s1进行索引和切片操作
索引:数学150
切片:语文 150 数学 150 英语 150
s1['数学'] s1[1] s1.loc['数学'] s1.iloc[1] s1[:3] s1.loc[['语文','数学','英语']] s1['语文':'英语'] s1.loc['语文':'英语'] # 位置索引不包含切片末尾 s1.iloc[:3]
# Series的基本概念 # 可以把Series看成一个定长的有序字典 # 可以通过shape,size,index,values等得到Series的属性 s1.shape s1.size s1.index #可以使用head()查看前n个值 s1.head(2) #可以使用tail()查看后n个值 s1.tail(2) #当索引没有对应的值的时候,可能出现缺省值--> NaN s1 = Series(data=[1,2,3,4],index=list('ABCD')) s2 = Series(data=[1,2,5,7],index=list('ACDE')) s1 + s2
n1 = np.array([1,2,3,4]) n2 = np.array([1,2,3,5]) n1 + n2 np.nan + 5 #pandas的特性,可以自动处理None为np.nan s3 = Series(data=[1,2,3,None,4]) s3 n1 = np.array([1,2,3,np.nan,4]) n1
# Series的运算 #使用Bool_list 访问数组对象 s = Series(np.random.randint(0,100,size=5)) s bool_list = [True, False, True, False, True] s[bool_list] s1 + 10
#需求:创建一个分数列表,求每个分数占总分数的百分比
score = Series(data=np.random.randint(0,150,size=10)) score score/score.sum()
s1 = Series(data=[1,2,3,4], index=list('ABCD')) s2 = Series(data=[1,2,5,7], index=list('ACDE')) #add()函数可以保留所有的index s1.add(s2, fill_value=0) data1 = np.random.randint(0,150,size=4) index1 = ['yuwen','shuxue','yingyu','lizong'] data2 = np.random.randint(0,150,size=4) index2 = ['yuwen','shuxue','yingyu','wenzong'] score1 = Series(data=data1,index=index1) score2 = Series(data=data2,index=index2) score1.add(score2, fill_value=0)