十分钟入门pandas框架及补充解释

来源:互联网 发布:registax mac 编辑:程序博客网 时间:2024/06/08 15:44

十分钟入门pandas官方传送门

本文是根据官方网站上《10Minutes to pandas》的一个简单的翻译,这篇文章是对pandas的一个简单的介绍,并且补充了一些东西,加了一些详细说明。官方导入的框架


1.0 创建对象

请参见数据结构介绍部分

1.1 通过传入一个列表数据创建一个Series,pandas默认会生成一个整形索引


1.2 通过传入一个numpy的数组,一个时间列表作为索引,和列标签来创建一个DataFrame


解释及扩展:1> dates = pd.date_range('20130101',periods=6) 生成一个以20130101开始的6个日期的数据,也可以用下面这种写法


                     2> np.random.randn(6,4)生成一个6行4列的二位数组,效果如下


1.3 通过传入一个能够被转换成类似序列结构的字典对象来创建一个DataFrame:


1.4 查看每列的数据类型


1.5 如果你使用的是IPython,tab自动补全功能将会可用的,能自动补全列名等一些属性,下面是能被补全属性的一个子集


2. 查看数据

查看基础部分

2.1 查看frame前面和后面的几行数据


说明:df.head()输出前几行数据,默认返回五行,可以输入参数指定返回的条数,df.head(3),返回3行,df.tail()同理

2.2 显示列索引和行索引以及根数据


2.3 Describe函数对数据进行一个统计显示


说明:count:这一列的数据个数    mean:这一列的平均数值   std:这一列的标准偏差  min:该列最小值  max:该列最大值

2.4 数据转置


2.5 通过轴线进行排序


说明:axis表示以哪个轴为基准,1表示以列索引为基准,0表示以航索引为基准;ascending表示是否升序,False表示降序,True表示升序,默认是升序排列

例: axis=0,以列索引为基准进行排列,默认升序,为了看出效果,我传入第二个参数,设置降序排列;更多情况请自行尝试


2.6 按列进行数据排序,ascending参数依旧有效


3.数据查找(截取)

注意:虽然查找和设置数据可以通过标准的Python/Numpy实现,但我们推荐经过优化的pandas数据访问方式:.at.iat.loc.iloc  .ix

查看索引文档Indexing and Selecting DataMultiIndex / Advanced Indexing

3.1 获取数据

3.1.1 查找一列,返回一个Series数据,等同于df.A

3.1.2 通过[]查找,通过切片的方式


3.2 通过标签查找数据

查看更多通过标签查找

3.2.1 通过标签获取一个交叉区域


3.2.2 通过标签,在多个轴上进行数据查找


说明:两个参数,第一个参数为选择的行索引上的范围,第二个参数表示在列索引上的截取范围

3.2.3 两个轴都设定截取范围


3.2.4 缩小这返回数据的规模


3.2.5 获取一个标量的值


3.2.6 快速访问一个标量的值,等同于上一个方法


3.3 通过位置查找

3.3.1 通过传入一个整数位置进行查找,查询的是行,从0开始编号,3:表示查找第四行


3.3.2  通过传入整数列表来查找数据,类似于numpy/python的风格


说明:表示查找索引为1,2,4行和1,2列是数据

3.3.3 通过行切片的方式查找


3.3.4 通过列切片的方式查找数据


3.3.5 获取具体位置的值



两个方法效果相同,获取第1行第一列的数据

3.4 通过布尔方式查找

3.4.1 通过某一列作为判断条件获取数据


说明:表示获取A列数字大于0的所有行

3.4.2 从DataFrame中查找每个位置满足条件的数据


说明:表示显示所有大于0的数据,不大于0的数据显示为NaN

3.4.3 通过isin() 函数进行过滤


3.5 数据设置

3.5.1 生成一个新的数列,通过索引自动排列


说明:index=pd.date_range('20130102',periods=6)依然可以用index=pd.date_range('1/2/2013',periods=6)代替

3.5.2 通过标签设置新值


3.5.3 通过位置设置新值


3.5.4 通过numpy数组设置一组新值


说明:len(df)会返回df的行数(6),np.array([5]*len(df))会生成一个有6个值的数组,并且每个值为5,把整个数组赋值给D列

3.5.5 经过设置后的df结果


3.5.6  通过where操作进行设置


4.丢失的数据

pandas主要用np.nan代替这丢失的数据,这些值默认不包含在计算机中,请看这数据丢失部分

4.1 Reindexing允许你在指定轴上修改、增加或删除索引,结果返回一个原始数据的拷贝


4.2 查找任何数据都没有丢失的行


4.3 给所有丢失的数据设置新值


4.4 判断一个位置上的值是否丢失,返回布尔值


5.操作

参看:Basic section on Binary Ops

5.1 统计

操作通常不包括缺失值的

5.1.1 执行描述性统计(平均值)


5.1.2 在其他轴上进行描述性统计(行索引)



说明:上面两个是同一个方法,传入参数区别,参数只有0和1两个值,0表示列索引轴,可以省略;1表示行索引轴

5.1.3 不同维度的 pandas 对象也可以做运算,它会自动进行对应,shift 用来做对齐操作;对不同维度的 pandas 对象进行减法操作


5.2 Apply(我操,不懂该如何翻译了,作用就是对df执行括号中的方法,括号中传入的参数是一个方法(函数))


5.3 直方图

查看更多Histogramming and Discretization


5.4 字符串方法

查看更多Vectorized String Methods.


6.合并

6.1 数据合并

Pandas对Series,DataFrame和Panel对象进行各种符合各种逻辑关系的合并操作提供了各种各样的方法

请看:Mergingsection

6.1.1 用concat()把pandas的对象合并到一起


我觉得官方的数据不够直观,我自己做了一个图,详细请看:


6.1.2 join(不知道用什么合适的词进行翻译)

类似于SQL风格的合并,参看:Database style joining


这里就呵呵了,我也没太弄明白,不知道该如何描述

6.1.3 Append(解释成追加?类似于数组的append)

增加一行到dataframe中. 参看Appending


7.Grouping(组操作)

对于组操作通常有下面几种情况

Splitting:根据一些规则把数据进行分割

Applying:每组数据执行不同啊方法

Combining:把结果融入到一个数据结构中

查看: Grouping section


7.1 根据条件分组,并且把分组的结果进行求和


说明:先根据A进行分组,分为foo和bar两组,把两组的结果进行求和

7.2 根据多个列进行分组,形成一个多级索引,并执行函数


8.Reshaping

具体参看: Hierarchical IndexingReshaping.

8.1 Stack


8.1.1 用stack() 方法对DataFrame的列进行压缩


8.1.2 解压缩


8.2 数据透视表(这部分我也不太明白,有待学习和修改)

参见: Pivot Tables.


8.2.1从数据中生成透视表


9.时间序列

pandas对频率转换重采样操作有很简洁、强大且有效的方法(把按秒采样转换为以5分钟为单位的采样数据),在金融领域是比较常见的

参见:Time Series section


一下是我转为30秒采样的结果


9.1 时区表示


9.2 时区转换


9.3 时间跨度转换


9.4 以周期时间转换


10. 分类

从0.15版本开始,pandas可以在DataFrame中支持Categorical类型的数据,参看:categoricalintroductionAPIdocumentation

df = pd.DataFrame({"id":[1,2,3,4,5,6], "raw_grade":['a', 'b', 'b', 'a', 'a', 'e']})

10.1 将原始的grade转换为Categorical数据类型


10.2 重新命名

df["grade"].cat.categories = ["very good", "good", "very bad"]


10.3 对类别重新进行排序,并增加确实的类别

df["grade"] = df["grade"].cat.set_categories(["very bad", "bad", "medium", "good", "very good"])


10.4 根据分类顺序进行排序,不根据字典顺序


10.5 通过分类进行分组,包括空类


11.绘图

Plotting 绘图文档

11.1 生成单线图


生成的结果如下图


注意:这里我要强调,我生成的数据都是随机,所以每次生成的图像都不同,用这些代码生成图片的时候跟我的不一样,不要以为是错的,图能出来就是对的,切记

如果想保存图片的,在plt.show()前面执行plt.savefig("./cos.png")这行代码,参数是路径和图片的名称,具体线条颜色什么的设置参考matplotlib框架

11.2 生成多线图



12.数据的存取

12.1 对CSV文件的存取


12.2 对HDF5的存储


12.3 对Excel的存储