从最开始的Python基础语言,到前几天的Numpy模块,其实前面所有的东西都是在为Pandas模块做准备。Pandas是数据分析核心工具包,基于Numpy构建,为数据分析而存在!
Pandas模块包括一维数组Series和二维数组DataFrame,可以直接读取数据并处理,高效且简单,这个模块兼容各种数据库,支持各种分析算法,话不多说,我们今天首先来看一维数组Series
Series是带有标签的一维数组,可以保存任何数据类型(整数,字符串,浮点数,Python对象等),轴标签统称为索引
我们来简单看一下Series数据长什么样子
(1)Series数据结构
import numpy as np
import pandas as pd
# 导入numpy、pandas模块
s = pd.Series(np.random.rand(5))#随机创建5个Series数据
print(s)#输出数据
print(type(s))#输出数据类型
输出结果:
我们可以看到Series数据其实就是带有标签的一维数组,它相较于前面学的Numpy的ndarray数组而言,它是自带索引index的数组,组成结构为一维数组+对应索引,所以当我们只看Series的值的时候,其实它就是一个ndarray
对于Series数据我们可以分别查看其索引index和值values
print(s.index,type(s.index))
print(s.values,type(s.values))
输出结果:
通过输出结果我们可以看到Series的值的类型其实就是ndarray,Series数据和dict相比而言,Series更像是一个有顺序的字典,其索引原理与字典十分相似,一个用key,一个用index
(2)Series创建方法
首先来看由字典创建的Series
dic = {'a':1 ,'b':2 , 'c':3, '4':4, '5':5}
s = pd.Series(dic)
print(s)
输出结果:
用字典创建Series时,字典的key就是Series的index,字典的values就是Series的values
再来看由一维数组创建的Series
arr = np.random.randn(5)
s = pd.Series(arr)
print(arr)
print(s)
输出结果:
上面的index是默认的,我们也可以自定义Series的index
s = pd.Series(arr, index = ['a','b','c','d','e'],dtype = np.object)
print(s)
输出结果:
在自定义index时,要注意index的长度需要和数组的长度保持一致
再来看由标量创建的Series
s = pd.Series(10, index = range(4))
print(s)
输出结果:
如果data是标量值的时候就必须要提供索引,因为该值会重复来匹配索引的长度
(3)Series名称属性–name
创建Series时可以自定义Series的名称,即它的name
s1 = pd.Series(np.random.randn(5))
print(s1)
print('-----')
s2 = pd.Series(np.random.randn(5),name = 'test')
print(s2)
print(s1.name, s2.name,type(s2.name))
输出结果:
name是Series的一个参数,创建一个数组的名称,通过.name的方法输出数组的名称,输出格式为str,如果没有自定义名称,则输出为None
当然了,Series也可以重命名
s3 = s2.rename('hehehe')
print(s3)
print(s3.name, s2.name)
输出结果:
通过rename()的方法来重新命名一个Series数组的名称,并且指向一个新的数组,原来的数组是不变的
(4)Series位置下标
Series的位置下标类似于序列
s = pd.Series(np.random.rand(5))
print(s)
print(s[0],type(s[0]),s[0].dtype)
print(float(s[0]),type(float(s[0])))
输出结果:
Series的位置下标从0开始,输出结果为numpy.float的格式,可以通过float()函数转换为Python float格式,numpy.float与float所占用的字符是不一样的
(5)Series标签索引
因为Series是有标签的,所以我们查看Series值的时候可以直接通过标签来查看,跟字典通过key值来查看values 是非常像的
s = pd.Series(np.random.rand(5), index = ['a','b','c','d','e'])
print(s)
print(s['a'],type(s['a']),s['a'].dtype)
# 方法类似下标索引,用[]表示,内写上index,注意index是字符串
sci = s[['a','b','e']]
print(sci,type(sci))
# 如果需要选择多个标签的值,用[[]]来表示(相当于[]中包含一个列表)
# 多标签索引结果是新的数组
输出结果:
(6)Series切片索引
这里的切片和序列中切片的使用基本是一样的,只是换成了index,要注意的一点是用index做切片的时候是末端包含的,但是序列中的切片是左闭右开,末端元素不包含
s1 = pd.Series(np.random.rand(5))
s2 = pd.Series(np.random.rand(5), index = ['a','b','c','d','e'])
print(s1[1:4],s1[4])
print(s2['a':'c'],s2['c'])
print(s2[0:3],s2[3])
输出结果:
(7)Series布尔型索引
布尔型索引是做数据分析中非常重要的部分,所以Series里面也有
s = pd.Series(np.random.rand(3)*100)
s[4] = None # 添加一个空值
print(s)
bs1 = s > 50
bs2 = s.isnull()
bs3 = s.notnull()
print(bs1, type(bs1), bs1.dtype)
print(bs2, type(bs2), bs2.dtype)
print(bs3, type(bs3), bs3.dtype)
print('-----')
# 数组做判断之后,返回的是一个由布尔值组成的新的数组
# .isnull() / .notnull() 判断是否为空值 (None代表空值,NaN代表有问题的数值,两个都会识别为空值)
print(s[s > 50])
print(s[bs3])
# 布尔型索引方法:用[判断条件]表示,其中判断条件可以是 一个语句,或者是 一个布尔型数组!
输出结果:
今天的分享就到这里啦,有问题的话可以私聊我哦,看到都会回的,没回就是在写作业啦~
本人是一位211高校在读的本科生,对数据分析比较感兴趣,去年拿到了数学建模国家一等奖,今年参加了美赛还没结果,参加比赛选的题型都是大数据型,用过Excel,Spss,Lingo,MATLAB做数据分析,现在觉得Python比较高效,做数据可视化也非常方便,每天都在坚持学习,对Python数据分析和数据可视化有兴趣的可以关注我哦,每天都会更新的,跟我一起进步呀