Pandas的数据结构--Series

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)








猜你喜欢

转载自blog.csdn.net/qq_42034590/article/details/80702765
今日推荐