python笔记手册_Python学习笔记-Pandas学习手册

Pandas手册

为什么需要Pandas

Pandas(panel data & Data Analysis)是基于Numpy的专门用于数据分析的库,处理大型的结构化表格数据尤其方便。pandas借鉴了R的数据结构,并支持numpy中定义的计算(比如矩阵运算),另外,底层用Cython和C做了很多速度上的优化。总之,Pandas是数据分析工作者使用Python时最常使用的库。

关键缩写和包导入

在这个速查手册中,我们使用如下缩写:

df:任意的Pandas DataFrame对象

s:任意的Pandas Series对象

同时我们需要做如下的引入:

import pandas as pd

import numpy as np

from pandas import Series,DataFrame

Pandas的数据结构及创建方法

Series包含一组数据(值,一维)以及与之相对应的一组数据标签(索引,只能整体赋值),另外,它们都有一个name属性

Series(my_list,index)#从可迭代对象my_list(列表,ndarray,字典等)创建一个Series对象。以字典构建Series时索引可以自由地指定,结果会按索引排序

DataFrame是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型,可以看做是由Series组成的字典

DataFrame(data,columns,index)#data最常见的形式由等长列表或数组组成的字典,columns即字典键值可自由指定,index长度必须同data长度相等;data为嵌套字典时,外层字典的键作为列,内层键则作为行索引;data为二维ndarray时,行标列标的长度都应严格对应

简单是数据检查

df.head(n):查看DataFrame对象的前n行

df.tail(n):查看DataFrame对象的最后n行

df.shape():查看DataFrame的形状

df.describe():查看数值型列的汇总统计,标签值

数据选取/切片

df[col]:根据列名,并以Series的形式返回列,df[[col]]返回的是DataFrame格式

df[[col1, col2]]:以DataFrame形式返回多列

df[a:b]#如果ab是数值,默认是行切片,区间是[a,b),即普通的数值切片;如果ab是标签值,则是[a,b],包含末端,需注意,标签值的切片默认列优先,但标签值列切片却不能用[a:b]这种方法

df.ix[:3,:2],df.ix[:3,[0,1,2]]#ix最方便,表示前3行前两列,使用方法与ndarray完全相同,也可用标签值来切片

iloc方法#根据索引的整数位置选取行列,不会出现整数索引跟标签索引混淆的情况

DataFrame(df,columns=,index=)#这种方法得到的结果不能进行赋值操作

df[列][行]=df.ix[[行],[列]]=df.ix[行][列]#这3中方法等价,生成相应的视图,结果能赋值数据存储I/O

pd.read_csv(path,sep,header,index_col,names,skiprows,na_values,nrows):从CSV文件导入数据,默认分隔符是逗号。sep一般是固定的分隔符或正则;header指用作列名的行号,默认0,可指定为其它数字或None;index_col指用作行索引的列名列编号(可以是一组);names指定列名的列表(一般结合header=None),na_values指要替换为Na的值,可以是列名对应的字典;nrows限定读取的行数

pd.read_table(filename):从限定分隔符的文本文件导入数据,默认分隔符为制表符,,主要参数同上

pd.read_excel(filename):从Excel文件导入数据

pd.read_sql(query, connect):从SQL表/库导入数据,connect可以通过sqlite3,pymysql,pymssql三个库的函数来定义

pd.read_json(json_string)、json.loads():从JSON格式的字符串导入数据;

pd.read_clipboard():从你的粘贴板获取内容,并传给read_table(),,在将网页转换为表格时很有用

pd.DataFrame(dict):从字典对象导入数据,Key是列名,Value是数据

df.to_csv(filename):导出数据到CSV文件,可以指定分隔符和保存的行列等

df.to_excel(filename):导出数据到Excel文件

df.to_sql(table_name, connection_object):导出数据到SQL表

df.to_json(filename)、json.dumps():以Json格式导出数据到文本文件;

csv.reader(open(filename))得到由行列表组成的可迭代对象;csv.writer(open(filename,'wb')).writerrow(datarow)写入数据

元素级函数(ufunc)应用及聚合统计函数

df1+df2,df1.add(df2,fill_value=0)#行列索引是两者的并集,没有重叠的位置是NaN,,不指定缺失值填充的话,前后等价,,计算顺序是先按照对应位置填充缺失值再计算,计算结果仍可能有缺失值哦

df1-df2,df1.sub(df2)#重叠的部分相减,其它地方缺失

df1*df2===df1.mul(df2) df1/df2===df1.div(df2)

DataFrame与Series之间的运算遵循广播原则,实际是DataFrame的每一列与Series相运算,即Series之间的运算。默认是在行上广播(在轴1上匹配在轴0上广播),在列上广播需要指定df.sub(s,axis=0)

np.func(df),df.apply(func)#两种调用ufunc的方法,第二种方法还能调用自定义函数。比如,f=lambda x:x.max()-x.min();df.apply(f),默认是在轴0(行)上应用函数,一般意味着行的坍塌。df.apply(f,axis=1)指定在列上应用

s.unique(),pd.value_counts(s)#Series的两个函数,求唯一值数组和值计数

df.describe():查看数据值列的汇总统计,如果是非数值则是另外一种统计方式

df.sum(axis,skipna,level)#求和,默认在axis=0上计算,skipna指是否跳过缺失值,默认为True,全部Na的和是0

df.max(),df.min()#求最大值最小值,参数同上。skipna=True时,全部Na的和是Na

df.corr(method):返回列与列之间的相关系数(包含缺失值),method是相关系数的类型pearson(默认),kendall,spearman

df.count(axis):返回指定轴上非空值的个数

df.mean(axis,skipna,level),df.std(ddof):返回指定轴的均值和标准差,自由度ddof默认为1

argmin,argmax#计算最小值和最大值的索引位置(整数)

idxmin,idxmax#计算最小值和最大值的索引值

df.cumsum(),df.cumprod()#样本值的累计和和累计乘积,默认跳过缺失值,Na对应的累加值Na

diff#计算一阶差分(对时间序列很有用)

排序与排名

df.sort_index(axis,ascending)#按索引排序,默认是在轴0上升序排列,ascending=False则降序

s.sort_values#按值排序,相同值按索引序列排序(正序逆序有差别),缺失值永远在最后面(按索引正序排列)

df.sort_values(by=['a','b'])#指在a列b列上排序,a主b副,,这样的方法只能在axis=0上排序

df.sort_values([col1,col2], ascending=[True,False]):先按列col1升序排列,后按col2降序排列数据

df.rank(axis,ascending,method)#排名函数返回索引对应的名次,method有‘average’默认在相等分组中,为各个值分配平均排名,‘min’,‘max’(使用整个分组的最小/最大排名)和‘first’按值在原始数据中的出现顺序分配排名

数据规整

df.dropna(axis,how)#丢弃缺失值,默认是去掉含有Nan的行,how='all'指去不为Nan才丢弃

fillna(value,method,axis,inplace,limit)#value是指填充的值,method有ffill,bfill等,inplace默认是False,指填充后返回新对象而源数据不变。还可用字典(每列赋值不同)给缺失值赋值

s.astype(float):将Series中的数据类型更改为float类型

obj.reindex(arr)#obj可以是Series或者DataFrame,arr既可以是index对象或其它序列型的Python数据结构,默认是更改index,也可以指定为更改columns。以上都可以通过Series和DataFrame重新生成的操作达到,但reindex函数还有一些缺失值处理参数。fill_value直接给缺失值赋值,method=ffill/bfill(向前填充或向后填充),limit指定最大填充量

df.drop(arr,axis)#丢弃指定轴上的一个或多个项,默认axis=0,即行index。Series可同样操作,,drop并不改变源数据,而del是直接操作源数据,且只能删一列

df.stack(),df.unstack()#构建和展开层次化索引,默认从最内层索引开始,可以传入分层的名称或编号来设置

df.swaplevel('key1','key2')#调整索引的级别

df.sortlevel()#由外到内排序,最外层的索引级别是0

df.set_index(drop='True'),reset_index()#将列转换为行索引及其反功能函数,drop指该列是否在数据中删除

df.to_panel(),pl.to_frame()#DataFrame与Panel面板数据(3维ndarray)的相互转化

s.map(字典或函数)#创建一个元素级的映射,可以是字典也可以是函数

data.replace()#替换元素,可以是单值,可以是数组,也可以是字典(相当于map函数),fillna可以看做特殊的replace

df.rename(index,columns)#通过函数或字典来更改轴索引,横轴纵轴都能改

pd.cut(arr,bin)#数据离散化,返回一个特殊的Categorical对象,默认左开右闭。如果bin是数值,则根据arr的最小值和最大值计算等长面元;如果bin是数组,则直接根据数组里的值创建区间

pd.qcut(data,[0,0.1,0.5,0.8,1])#qcut类似cut,它按样本大小划定区间而不是考虑区间大小;如果传入整数n,则得到样本大小基本相等的n个面元区间

pd.get_dummies(df[col], prefix)#将DataFrame中的某一列标签化,prefix是转换后列名的前缀

df.drop_duplicates(col,keep)#移除重复行,默认按全部列判断是否重复(不包括索引),也可以指定列名,,默认保留一组重复值里的第一个,可用keep参数设置为last

数据分组,透视表及数据组合

df.groupby(col):返回一个按列col进行分组的Groupby对象,col还可以是一组列、一组等长数组或是字典,分组后默认分组键会变成索引(可以传入参数as_index=False来),可以用axis指定分组的轴,默认是0;甚至可以用函数分组,比如df.groupby(len).sum()指按索引值的长度分组

grouped.agg(func)#对分组进行运算,func是被引用的函数,可以是numpy里的函数或是自定义等,,可一次引入一组函数[func1,func2,func3],,可以传入元组或字典给结果赋值,相当于SQL里面的as,grouped.agg([(name1,func1),(name2,func2)])

grouped.transform(func)#transform除了在分组上进行运算,结果的索引与源数据的索引相同(所以有时候需要广播)

data.apply(func)#apply是最一般化的分组函数调用方法,agg/tranfrom算是它的特殊使用,它是在各组上运行函数后,将结果用pd.concat组合在一起;其中可以一并传入函数的其它参数

df.pivot(col1,col2)#转换透视表的快捷方式,相当于用set_index创建层次化索引,再用unstack重塑

df.pivot_table(values=[col1,col2],rows=col3,cols=col4, aggfunc=max):创建一个数据透视表,行拖入col3,列拖入col4,计算col1和col2上的最大值,margins可以指定是否添加总计

df1.join(df2,on=col1,how='inner'):对df1的列和df2的列执行SQL形式的join,默认按索引合并,一次可连接多个DataFrame

pd.merge(df1,df2,left_on,right_on,how,on)#默认以相同名称的列合并,没有相同值是使用left_on,right_on来指定,有多个相同名称列是用on来指定,how默认是左连接,,还有left_index/right_index可以将索引用作连接键

df.concat([df1, df2],axis=1,how,keys=[]):将df2中的列添加到df1的尾部,默认是在axis=0上工作的,默认是'outer',,keys可以是列名或索引,,ignore_index=True会去掉旧索引生成新索引

参考文档:

2、《利用Python进行数据分析》老鼠书Pandas章节:Jupyter Notebook Viewer

你可能感兴趣的:(python笔记手册)