#jupyter-notebook常用快捷键
执行当前cell:Ctrl+enter
插入一个cell:Alt+enter
新增一个cell:shift+enter
Series介绍
#1.Series的索引和值
import numpy as np
import pandas as pd
s = pd.Series(np.random.rand(5))
print(s.index)
print(s.values)
#可以看出:索引是一个生成器,值是一个nd数组
# .index查看series索引,类型为rangeindex
# .values查看series值,类型是ndarray
# 核心:series相比于ndarray,是一个自带索引index的数组 → 一维数组 + 对应索引
# 所以当只看series的值的时候,就是一个ndarray
# series和ndarray较相似,索引切片功能差别不大
# series和dict相比,series更像一个有顺序的字典(dict本身不存在顺序),其索引原理与字典相似(一个用key,一个用index)
RangeIndex(start=0, stop=5, step=1)
[0.31784781 0.78704873 0.61291665 0.03719027 0.71440122]
0.3178478083913676
创建Series的方法
#2.创建Series的方法
pandas.Series(data=None,index=None, dtype=None, name=None, copy=False, fastpath=False)
#data 需要是一个可排序的可迭代对象,可以是列表,字典,元组,一维数组,一个标量值,但是不能是集合
#dtype 规定元素的格式,如果有数字有字符串就用object
#index 数据自带了就用,数据没自带就用自然数,认为规定了就用规定的,如果数据自带了索引你还认为规定索引,就用你的索引生成一堆空值
#name s.name输出数组的名称,输出格式为str,如果没用定义输出名称,输出为None,rename生成一个新的s对象
data0 = [1,2,3,4,5]
data1 = {'a':1,'b':2,'c':3,'d':4,'e':5}
data2 = (1,2,3,4,5)
data3 = np.random.rand(5)
data4 = 'a'
data5 = 1
s0 = pd.Series(data0,index=list('abcde'))
s1 = pd.Series(data1,index=list(range(5)))
s1_1 = pd.Series(data1)
s2 = pd.Series(data2,index=list('abcde'))
s3 = pd.Series(data3)
s4 = pd.Series(data4,index=list(range(5)))
s5 = pd.Series(data5,index=list(range(5)))
print(s0,s1,s2,s3,s4,s5)
# 注意:key肯定是字符串,假如values类型不止一个会得到一个类型为object的类型
# 如果强行给字典加index,会使用你的index但是值全为空,
# 单个标量时,s的长度由index控制
a 1
b 2
c 3
d 4
e 5
dtype: int64 0 NaN
1 NaN
2 NaN
3 NaN
4 NaN
dtype: float64 a 1
b 2
c 3
d 4
e 5
dtype: int64 0 0.588359
1 0.556708
2 0.857709
3 0.174475
4 0.849556
dtype: float64 0 a
1 a
2 a
3 a
4 a
dtype: object 0 1
1 1
2 1
3 1
4 1
dtype: int64
Series 索引
#3.Series:索引使用
# 下标索引,标签索引,切片索引,布尔型索引
#下标索引:按位置取值,只是不能取-1
s = pd.Series(list(range(5)),index=list('abcde'))
print(s)
print(s[0],type(s[0])) #按位置取一个值,返回具体值
print(s[[0,2]],type(s[[0,2]])) #按位置取多个值,多个值一定要放到一个列表里,返回一个s对象
a 0
b 1
c 2
d 3
e 4
dtype: int64
0 <class 'numpy.int64'>
a 0
c 2
dtype: int64 <class 'pandas.core.series.Series'>
#标签索引:按index取值,和字典取值差不多
print(s['a'])
print(s.get(2)) #这里get的使用和字典类似
print(s[['a','b']])
0
2
a 0
b 1
dtype: int64
#切片索引:用法和列表的切片类似,[起:终:步长],还可以用index做切片
print(s[0:3]) #不包含尾部
print(s['a':'d']) #包含尾部
a 0
b 1
c 2
dtype: int64
a 0
b 1
c 2
d 3
dtype: int64
#布尔索引:根据布尔值来取数据
s = pd.Series(np.random.rand(5)*100)
s[5] = None
print(s)
s1 = s>50 #s1的值就全部变成布尔值了
print(s1)
# .isnull() / .notnull() 判断是否为空值 (None代表空值,NaN代表有问题的数值,两个都会识别为空值)
s2 = s.isnull()
s3 = s.notnull()
print(s2)
print(s3)
0 52.114
1 39.3662
2 56.7546
3 19.6864
4 4.7018
5 None
dtype: object
0 True
1 False
2 True
3 False
4 False
5 False
dtype: bool
0 False
1 False
2 False
3 False
4 False
5 True
dtype: bool
0 True
1 True
2 True
3 True
4 True
5 False
dtype: bool
Series 基本使用
#4.Series 基本使用
# 重新索引 / 对齐 / 添加、修改、删除值
#重新索引:得到一个新的s对象,该对象按新索引排序,如果索引有对于值则拿过来用,索引无值默认用NaN填充,fill_value指定填充值
s = pd.Series([1,2,3,4,5],index=list('abcde'))
s1 = s.reindex(list('cdefa'))
s2 = s.reindex(list('cdefa'),fill_value=0)
print(s)
print(s1)
print(s2)
a 1
b 2
c 3
d 4
e 5
dtype: int64
c 3.0
d 4.0
e 5.0
f NaN
a 1.0
dtype: float64
c 3
d 4
e 5
f 0
a 1
dtype: int64
#对齐(加减):两个s对象相加减的时候,自动对齐索引相同的数据,索引不同的数据结果都是NaN
s1 = pd.Series([1,2,3,4,5],index=list('abcde'))
s2 = pd.Series([6,7,8,9,0],index=list('cdefg'))
s3 = pd.Series([1,2,3,4,5])
s4 = pd.Series([6,7,8,9,0])
print(s1+s2)
print(s3+s4)
print(s1+s3) #两种不同的索引相加
a NaN
b NaN
c 9.0
d 11.0
e 13.0
f NaN
g NaN
dtype: float64
0 7
1 9
2 11
3 13
4 5
dtype: int64
a NaN
b NaN
c NaN
d NaN
e NaN
0 NaN
1 NaN
2 NaN
3 NaN
4 NaN
dtype: float64
#删除值
s = pd.Series(list(range(5)),index=list('abcde'))
print(ds1)
print(s)
ds2 = s.drop('e') #默认不修改原s对象,并返回一个修改后的对象
# ds2 = s.drop(0) 这句会报错,因为定义了索引之后,只能用索引值drop
print(ds2)
print(s)
s1 = pd.Series(list(range(5)))
ds1 = s1.drop(0) #没定义索引的可以这样用
#增加值,修改值:和字典用法类似
s['a'] = 100
s[2] = 200
s['f'] = 300
s2 = s.append(pd.Series(list(range(5,9)))) #被append的对象也得是个s对象
print(s)
print(s2)
1 1
2 2
3 3
4 4
dtype: int64
a 0
b 1
c 2
d 3
e 4
dtype: int64
a 0
b 1
c 2
d 3
dtype: int64
a 0
b 1
c 2
d 3
e 4
dtype: int64
a 100
b 1
c 200
d 3
e 4
f 300
dtype: int64
a 100
b 1
c 200
d 3
e 4
f 300
0 5
1 6
2 7
3 8
dtype: int64