pandas是一种专门分析处理数据的库
# 1 Series & dataFrame 主要的数据结构
# 2 Basic & Select & Set 基本操作
# 3 Missing Data Processing 丢失值处理
# 4 Merge & Reshape 数据融合 形状定义
# 5 Time Series & Graph & Files 时间序列 图形绘制 文件操作
#encoding=utf-8 ''' pandas 数据分析库 是为了解决数据分析任务而创建的一种基于numpy的工具 纳入了大量的库和一些标准的数据模型,提供了非常高效的操作大型数据集的方法,提供了大量使我们快速的便捷的处理数据的函数 使得python成为广泛使用的高效的数据环境 官网:http://pandas.pydata.org ''' import numpy as np import pandas as pd from pylab import * def main(): # 1、pandas基础数据结构Series & DataFrame s=pd.Series([i*2 for i in range(1,11)])#series是pandas当中一个基本的数据结构,填入数组1~10 print(type(s))#得<class 'pandas.core.series.Series'> dates=pd.date_range("20170301",periods=8)#periods表示8天,下面是第二个数据结构,dataframe df=pd.DataFrame(np.random.randn(8,5),index=dates,columns=list("ABCDE")) #定义8行5列随机数,index是主键(索引),columns表示属性命名,这里list将字符串序列化可以得到一个数组 print(df) #dataframe还有下面这种定义方式,分别定义各个属性的值 # df=pd.DataFrame({"A":1,"B":pd.Timestamp("20170301"),"C":pd.Series(1,index=list(range(4)),dtype="float32"),\ # "D":np.array([3]*4,dtype="float32"),"E":pd.Categorical(["police","student","teacher","doctor"])}) # print(df) #2、pandas基本操作Basic & Select & Set #basic print(df.head(3))#head就是打印出前几行 print(df.tail(3))#tail就是打印出后几行 print(df.index)#可以直接打印出dataframe的index print(df.values)#values已经是数组了 print(df.T) # 矩阵转置 #print(df.sort(columns="C")) # 排序,可以针对某一列进行排序,升序,index也变了 print(df.sort_index(axis=1,ascending=False)) # axis=1表示通过属性值进行排序,ascending=False表示进行 降序 print(df.describe()) # 打印出所有属性值的数量,可大致了解数据 #select print("下面开始学select") print(type(df["A"])) #得<class 'pandas.core.series.Series'>,dataframe由各个series组成的,series是dataframe的一个特例,所以操作通用 print(df[:3]) # 数组中可以直接这么用,dataframe也可以用下标进行切片 print(df["20170301":"20170304"]) #用index进行切片 print(df.loc[dates[0]])#更为通用的可以用loc函数进行处理 print(df.loc["20170301":"20170304",["B","D"]])#进行多维度的进行选择,取20170301到20170304的数据且B列到D列的数据 print(df.at[dates[0],"C"])#也可以通过at指定特定的一个值 #print(df.at[20170301,"C"]) 但这样写不行 print("上面通过索引进行选择,下面通过下标进行选择")#通过命令iloc print(df.iloc[1:3,2:4])#1到3行且2到4列,左包含右不包含 print(df.iloc[1,4])#指定一个 print(df.iat[1, 4]) print("有条件语句") print(df[df.B>0][df.A<0])#注意这里是df.B不能直接写成B print(df[df> 0])#表里>0的元素直接返回数,<0的元素返回NaN print(df[df["E"].isin([1,2])])#表示数值是不是在后面的范围里,因为表里都是浮点数,所以应该返回空即Index: [] #set print("对dataframe属性进行设置修改") s1=pd.Series(list(range(10,18)),index=pd.date_range("20170301",periods=8)) df["F"]=s1 print(df)#可得新加了属性F一列 df.at[dates[0],"A"]=0 print(df) df.iat[1,1]=1 df.loc[:,"D"]=np.array([4]*len(df))#D列全赋成4,这里需要添加一个数组 print(df) df2=df.copy() df2[df2>0]=-df2#把所有>0的数变成负的,于是表里所有数都变成负数了 print(df2) #3、pandas缺失值处理Missing Data Processing #Missing Values print("Missing Values") df1=df.reindex(index=dates[:4],columns=list("ABCD")+["G"]) #定义的df1取df的前四行,columns取ABCD列且加一个G列 df1.loc[dates[0]:dates[1],"G"]=1#给G列的第一行第二行进行赋值成1 print(df1)#其中有NaN值,也就是所谓空值 #缺失的处理方式有两种,一种是直接丢弃,另一种是进行填充,包括填充固定值以及插值(可参考scipy中插值算法) print(df1.dropna())#带有NaN的两行数据没了 print(df1.fillna(value=2)) #4、pandas表统计与整合 数据融合和形状定义Merge&Reshape #Statistic print("统计方面的应用") print(df.mean())#求所有属性的均值,返回结果的属性就是series print(df.var()) #求方差 s=pd.Series([1,2,4,np.nan,5,7,9,10],index=dates) print(s) print(s.shift(2))#把所有的值移位2个,而后面的值不会补到前面,前面的值为NaN print(s.diff())#不填数字表示一阶,递减的结果,第一个数字前面没有,所以减去的结果是NaN print(s.value_counts())#每一个值在series当中出现的次数,绘制直方图比较方便 print(df.apply(np.cumsum))#通过apply直接填入函数,cumsum表示后面所有的值都是前面的累加值,参考D列 print(df.apply(lambda x:x.max()-x.min()))#还可以自定义函数,打印每个属性的最大值和最小值的差,即极差 #Concat print("表格拼接和类sql的操作") pieces=[df[:3],df[-3:]] print(pd.concat(pieces))#拼接df的前三行和df的后三行 left=pd.DataFrame({"key":["x","y"],"value":[1,2]})#key和value是两个属性 right=pd.DataFrame({"key":["x","z"],"value":[3,4]}) print("LEFT:",left) print("RIGHT:",right) print(pd.merge(left,right,on="key",how="left"))#类似sql中的join函数 # 保留了左边的x和y,根据key属性拼接,拼接方式how是left,默认为inner会去掉所有不同的,也可以是outer,所有值都会有 df3=pd.DataFrame({"A":["a","b","c","b"],"B":list(range(4))}) print(df3.groupby("A").sum())#按照A属性分类,将B聚合 #Reshape print("透视功能,交叉分析,透视表") import datetime df4=pd.DataFrame({'A':['one','one','two','three']*6,#这表格有24行 'B':['a','b','c']*8, 'C':['foo','foo','foo','bar','bar','bar']*4, 'D':np.random.randn(24), 'E':np.random.randn(24), 'F':[datetime.datetime(2017,i,1) for i in range(1,13)]+#F属性元素都是拼接来的 [datetime.datetime(2017, i, 15) for i in range(1, 13)]}) print(pd.pivot_table(df4,values="D",index=["A","B"],columns=["C"]))#透视交叉表的命令是pivot_table #对df4进行操作,输出值是D,赋值项是A和B,列值是C,F没用到即为空 #5、pandas时间序列、图形绘制和文件操作Time Series & Graph & Files #Time Series print("时间序列") t_exam=pd.date_range("20170301",periods=10,freq="S")#periods定义有多少个时间段,freq参数定义为s表示秒 print(t_exam) #Graph print("绘图功能")#除了用matplotlib实现,pandas可自己实现画图 ts=pd.Series(np.random.randn(1000),index=pd.date_range("20170301",periods=1000)) ts=ts.cumsum() ts.plot() show() #File print("文件操作") df6=pd.read_csv("./data/test.csv") print("Csv",df6) df7 = pd.read_excel("./data/test.xlsx","Sheet1") print("Excel",df7) df6.to_csv("./data/test2.csv") df7.to_excel("./data/test2.xlsx") if __name__=='__main__': main()
pandas:数据分析库
#pandas数据分析官网:
http://pandas.pydata.org/
pandas 官网