pandas库主要是解决如何提取数据的特征,提供高性能数据分析工具;
此库详情:http://pandas.pydata.org
引用方法:import pandas as pd
pandas 是基于numpy库实现的,常与numpy库和matplotlib库一起使用;
import pandas as pd
d=pd.Series(range(20)) #这个函数是产生一个序列类型,其中第一列是索引,第二列是元素的值;注意大小写区别
d.cumsum() #计算序列d中前项的累加和,其中第一列是索引,第二列是对对应位置的前n项的累加和
对pandas库的理解:,
主要是理解两个数据类型,分别是 Series 对应的是一维的数据类型,第二个数据类型是DataFrams,对应的是二维和多维;这两种是基于ndarray的扩展,其中numpy是关注数据的结构表达,而pandas更多的是扩展数据类型,关注的是数据的应用表达;体现在索引上面的应用;
基于以上数据类型的各种操作有:基本操作、运算操作、特征类操作、关联类操作;
Series数据类型,这是一种一维数据的类型,第一列为数据的索引,第二列为存储的数据,其中需要注意索引从0
以上是自动索引,
这个数据类型还有自定义索引;
方法如下:
在序列中提供两个元素,其中第一个位置为元素,第二个位置是序列的索引;
Series类型可以由如下方法创建:
1、python列表创建 (上面方法) 2、标量值创建 3、python字典创建 4、ndarray创建
标量值创建,第一个位置是标量元素,第二个位置是索引;
也可以只用字典的值,而自己另外定义其键,也就是索引:
其中索引如果位置更多,会自动创建位置,然后其值会填补成NaN;
从ndarray类型创建
import pandas as pd
import numpy as py
a=pd.Series(np.arange(20))
b=pd.Series(np.arange(5),index=np.arange(9,4,-1))
其中对Series类型,获取其索引的方法为:
b.index() 获取所有的索引 b.values()获取其所有的值,索引输出的就是一个index类型,而值输出的是一共array类型;
在索引的时候,自定义索引和自动索引同时并存,但是只能选择使用一个,混用则会报错;
索引用括号表示;注意在这个类型中可以用比较关系来表示索引
b[b>b.median()]
所索引的部分是在b中比中位数大的部分;
1、可以通过自定义索引来访问其中的内容
2、保留字 in 来获取
3、使用.get()的方法来获取其中的类型 b.get('f',100) #判断f是否在b中,若在则返回对应值,不在则返回第二个参数100,当不存在第二个参数的时候返回空;
Series类型的对齐问题;
三维加上四维的对象,索引值相同的进行运算,不同的不进行运算
即会自动对其不同索引的值,不是看位置,当索引一个存在一个不存在的时候,叠加后返回空
name属性,Series对象和索引都可以有一个名字,存储在属性.name中;
Series对象的修改;
相当于字典对象的修改,不同的是可以同时修改多个值,如 b['a','b']=20,则同时改变了a b 对应的值
Series库的DataFrame类型,二维数据类型
DataFrame类型是由共用相同索引的一组列组成,其实就是一个表格类型,既有行索引也有列索引,行索引为index,列索引为column,常用于表示二维数据,也可以表示多维数据;
DataFrame类型可以由如下类型创建:
1.二维ndarray对象创建
2.由一维ndarray、列表、字典、元组或series构成字典
3.Series类型创建
在横向上自动生成了行索引 0 1 ;在纵向上自动生成了列索引 0 1 2 3 4 其他的为元素
由字典创建的时候,字典的键默认为列的自定义索引,值为行的内容
自定义索引部分内容,当不存在的时候会自动补齐,
当横向或者纵向索引不存在的时候,可以手动补齐,也可以不补齐然后系统会自动补齐;
城市 | 环比 | 同比 | 定基 |
北京 | 101.5 | 120.7 | 121.4 |
上海 | 101.2 | 127.3 | 27.8 |
广州 | 101.3 | 119.2 | 120.0 |
深圳 | 102 | 140.9 | 145.5 |
沈阳 | 100.1 | 301.4 | 101.4 |
import pandas as pd
dl={'城市':['北京','上海','广州','深圳','沈阳'],'环比':[101.5,101.2,101.3,102,100.1],
'同比':[120.7,127.3,119.2,140.9,301.4],'定基':[121.4,127.8,120.0,145.5,101.4]}
d=pd.DataFrame(dl,index=['c1','c2','c3','c4','c5'])
print(d)
在索引的时候,会带上其编号:即c1,c2等,d['环比']直接获得一列元素
获得一行的元素:d.ix('c2')
d['环比']['c2'] 可获得某个具体位置的元素
DataFrame是二维的带标签的数组
pandas的数据类型操作:
增加和重排可以使用重新索引的方法,删除使用 drop方法
重排: .reindex(index,columns,fill_value,method,limit,copy) 能够改变和重排Series和DataFrame的索引
第一个参数定义重排的行,第二个定义重排的列,第三个用于填充缺失位置的值,method填充方法,ffill表示值向前填充,bfill向后填充,liimit表示最大填充量,copy默认True表示生成新对象,False表示不复制
索引类型的常用方法:
.append(index) 连接另一个index对象,产生新的index对象
.diff(index) 计算差集,产生新的index对象;
.intersection(index) 计算交集
.union(index) 计算并集
.delete(loc) 删除 loc位置的元素、
.insert(loc,e) 在loc位置增加一个元素 e
.drop() 删除某行或列的元素,括号里填行或者列的索引,默认操作行的索引,当需要删除列的时候,需给出 axis=1
d.drop('同比',axis=1)
pandas库的数据类型运算:
算术运算法则:
算术运算根据行列索引,补齐后运算,运算默认产生浮点数
补齐后缺项为NaN,即空值
二维和一维,一维和0维,会产生广播运算,即一维和0维(常数)的运算,一维元素的每一个位置都会和该常数发生运算;
二维和一维的运算,默认发生在一维,即二维元素的每一行和该一维元素的每一个位置发生运算,
采用加减乘除符号进行的二元运算产生新的对象;如果要指定每一列发生运算,则需要使用add等方法型,指定axis=0
也可使用 .add(d) ,.sub(d), .mul(d) , .div(d) 运算,分别是加减乘除
import numpy as np
import pandas as pd
a=pd.DataFrame(np.arange(12).reshape(3,4))
b=pd.DataFrame(np.arange(20).reshape(4,5))
print(a*b)#得到的结果是相同位置的元素运算,当某个位置不存在的时候补齐后运算,得到的结果是NaN
K=b.add(a,fill_value=100)#设置缺少的元素是100,即用100替换NaN
print(K)
c=pd.Series(np.arange(4))
print(c)
print(a-c)#每一行和c相应位置发生运算
b.sub(c,axis=0)#每一列和b发生运算
比较运算法则:
比较运算只比较相同索引的元素,不进行补齐 (都是二维时必须同维度尺寸相同,否则报错)
二维和一维,一维和零维进行广播运算
采用< > 等比较运算符号结果维布尔类型
数据的排序:
.sort_index() 这一方法在指定轴上根据索引进行排序,默认为升序 .sort_index(axis=0,ascending=True) 默认为横轴递增排序
.sort_value() 这一方法在指定轴上根据数值进行排序,默认是升序
Series.sort_value(anxis=0,ascending=True)
DataFrame.sort_value(by,axis=0,ascending=True) by 指的是axis轴上某个索引或者索引列表
对NaN统一放到排序的末尾,因此不管从小到大还是从大到小,都是放在排序的末尾
import pandas as pd
import numpy as np
b=pd.DataFrame(np.arange(20).reshape(4,5),index=['c','a','d','b'])
c=b.sort_value(2,ascending=False) #指定默认的横轴上即纵向的第二列按从大到小排列
d=c.index_value('a',axis=1)#在设定的纵向上即横轴对’a'这一行按从小到大排列
基本统计分析:
对一维series类型
其中describe方法可以得出所有 的统计分析的值
import pandas as pd
a=pd.Series([9,8,7,6],index=['a','b','c','d'])
b=a.describe()
print(b)
output:
count 4.000000
mean 7.500000
std 1.290994
min 6.000000
25% 6.750000
50% 7.500000
75% 8.250000
max 9.000000
dtype: float64
#得出的结果是Series类型,因此可以用Series的索引方法取其中的值
对二维DataFrame类型:
此时的统计值是按照0轴方向,即计算每一列的统计信息,describe的几个是一个横向索引为统计值,纵向为序号索引;
数据的累计统计分析:
可以在1~n上 的数据累计统计计算,减少for循环的使用
每个位置的数都是在纵向上,这一列上该位置以及之前位置所有元素的统计值
适用于pandas里面两种数据类型的滚动计算,
第一行由于前面没有元素,其前面的值被补充为NaN; 所谓相邻是该位置以及其之前一个w各数据;
a.cov(b) 计算a和b之间的 协方差 矩阵
a.corr(b)计算相关性矩阵
同时pandas库也可以绘图:Series.plot()绘图的时候是将其0轴的索引为x轴,其对应的索引值为y轴绘图
DataFrame.plot()则是对每一列元素为y轴,0轴索引为x轴绘出每一列的图像