python数据分析之pandas入门(一)
- 数据结构
- Series
- DataFrame
- 基本操作
数据结构
pandas的数据结构我觉得最主要的有两种,即Sereis和DataFrame
Series
Series是带标签的一维数组,可存储整数、浮点数、字符串、Python 对象等类型的数据。轴标签统称为索引。调用 pd.Series 函数即可创建 Series:
调用方法如下:
s=pd.Series(data, index=index)
上述代码中,data 支持以下数据类型:
1、Python 字典
2、多维数组
3、标量值(如,5)
index为轴标签列表(我是将series理解为列向量,而index理解为其索引)
以下直接给出三种情况下初始化示例:
Python字典:
多维数组:
data 是多维数组时,index 长度必须与 data 长度一致。没有指定 index 参数时,创建数值型索引,即 [0, …, len(data) - 1]。
其中np.random.rand(5)是产生一个长度为5,值为N(0,1)-即以0为均值、以1为标准差的正态分布序列标量值:
data 是标量值时,必须提供索引。Series 按索引长度重复该标量值。
DataFrame
如果说Series可能让大家觉得和数组没啥区别,那DataFrame我觉得才是真正让pandas收到众多程序员喜爱的原因了,因为它真的太香了,其最大优势我觉得在于可以直接读取mysql或者excel,让你操作数据就好比在navicat中操作表一样easy。话不多说,直接上代码示例。
直接读取mysql生成DataFrame
首先建一张mysql表,存储班级姓名和成绩字段,在navicat中看是这样的
基本操作
下面来介绍几个dataframe的基本操作
1、排序(df.sort_values)
根据某一列的值排序,函数定义为def sort_values(by, axis=0, ascending=True, inplace=False)
by表示需要排序的列名/行名,axis接受0或者1的输入,0表示按列的值排序,1表示按行的值排序,ascending接受布尔型输入,True表示升叙,False表示降序,inplace接受布尔型输入,表示是否需要替换原df,为True表示替换原df(此时该函数无返回值),为False表示不替换远df(此时返回值为新的排序过后的DataFrame对象)。
如在上述的成绩表中使用df.sort_values(by=‘score’,axis=0,ascending=True)表示对df按照score列升序排序,不替换原dataframe,运行结果为
可以看到新的dataframe是根据score升序排序的2、重设索引(df.reset_index)
该函数主要作用是重设索引,如1中所生成的dataframe可以看到虽然排序是变化了,但是索引依旧没有发生改变(最上面那行的索引为4),就可以根据reset_index函数来重设索引,如df.sort_values(by=‘score’,axis=0,ascending=True).reset_index(drop=True),其中drop=True的作用为不保留原索引列(drop=False即为保留原索引列)
可以看到在修改了排序的同时也修改了索引值。3、聚合
dataframe的聚合和sql语句中的聚合很类似,都是groupby+列名+操作的形式,如对示例dataframe需要求出每个班级的均分,可使用df.groupby(‘class’)[‘score’].mean()
上图中的index(索引)即为class的值4、lambda函数
lambda函数,又称为匿名函数,是深受各位程序员喜爱的东西,当然pandas也实现了接受lambda函数的特性,如我们需要处理score列,使小于85分的值标为-1,大于等于85分的值变为1,我们可以用如下表达式达到这一作用df[‘score’].apply(lambda x:-1 if x<85 else 1)
5、上移/下移
pandas中可以实现整个表格下移/下移一格,用nan来填充空值,如df.shift(1)代表下移一格
6、累加/累乘/累计最大/累计最小
此方法多用于时间序列上的数值处理,效果是计算第一行到当前行所有值的相加结果/相乘结果/最大值/最小值,函数分别为cumsum,cumpord,cummax和cummin,运行示例如下
由于实例中name列为字符串,因此不能使用累乘函数。