pandas 数据结构之DataFrame

来源:互联网 发布:客户信息记录软件 编辑:程序博客网 时间:2024/06/09 18:48

DataFraame是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型。DataFrame既有行索引也有列索引,可以被看作由Series组成的字典(共用同一个索引)。

DataFrame 对象的构建

用字典类型构建DataFrame对象

DataFrame 对象的构建的方法有很多,最常用的是用包含等长的列表或者是NumPy数组的字典创建DataFrame对象。

>>> import pandas as pd>>> from pandas import Series,DataFrame# 建立包含等长列表的字典类型>>> data = {'state':['Ohio','Ohio','Ohio','Nevada','Nevada'],'year':[2000,2001,2002,2001,2002],'pop':[1.5,1.7,3.6,2.4,2.9]}# 建立DataFrame对象>>> frame = DataFrame(data)# DataFrame会自动加上索引,且全部会被有序排列>>> frame   pop   state  year0  1.5    Ohio  20001  1.7    Ohio  20012  3.6    Ohio  20023  2.4  Nevada  20014  2.9  Nevada  2002

在建立DataFrame 对象的过程中,我们可以指定列的顺序:

>>> frame1 = DataFrame(data,columns=['year','state','pop'])>>> frame1   year   state  pop0  2000    Ohio  1.51  2001    Ohio  1.72  2002    Ohio  3.63  2001  Nevada  2.44  2002  Nevada  2.9>>> 

和Series一样,DataFrame对象也可以指定索引内容:

>>> index_1 = ['1st','2nd','3rd','4th','5th']>>> frame2 = DataFrame(data,index=index_1)>>> frame2     pop   state  year1st  1.5    Ohio  20002nd  1.7    Ohio  20013rd  3.6    Ohio  20024th  2.4  Nevada  20015th  2.9  Nevada  2002

用嵌套字典类型构建DataFrame对象

当由嵌套的字典类型生成DataFrame对象的时候,外部的字典索引会成为列名,内部的字典索引会成为行名。生成的DataFrame对象会根据行索引排序。

>>> pop = {'Nevada':{2001:2.4,2002:2.9},'Ohio':{2000:1.5,2001:1.7,2002:3.6}}>>> frame3 = DataFrame(pop)>>> frame3      Nevada  Ohio2000     NaN   1.52001     2.4   1.72002     2.9   3.6

除了使用默认的按照行索引排序之外,我们还可以指定行序列:

>>> frame4 = DataFrame(pop,[2000,2001,2002])>>> frame4      Nevada  Ohio2000     NaN   1.52001     2.4   1.72002     2.9   3.6

DataFrame 内容访问

获取列数据

从DataFrame对象中获取一列的结果为一个Series,可以通过以下两种方式获取:

方法一:通过字典索引方法获取

>>> frame['state']0      Ohio1      Ohio2      Ohio3    Nevada4    NevadaName: state, dtype: object

方法二:通过属性方式获取

>>> frame.state0      Ohio1      Ohio2      Ohio3    Nevada4    NevadaName: state, dtype: object

获取行数据

可以通过ix获取行数据:

>>> frame2     pop   state  year1st  1.5    Ohio  20002nd  1.7    Ohio  20013rd  3.6    Ohio  20024th  2.4  Nevada  20015th  2.9  Nevada  2002# 获取frame2中索引为‘1st’的一行数据,也可以写作‘frame2.ix[0]’>>> frame2.ix[['1st']]     pop state  year1st  1.5  Ohio  2000# 获取frame2中的多行数据>>> frame2.ix[['2nd','3rd','4th']]     pop   state  year2nd  1.7    Ohio  20013rd  3.6    Ohio  20024th  2.4  Nevada  2001# 还可以通过默认数字行索引来获取数据>>> frame2.ix[range(3)]     pop state  year1st  1.5  Ohio  20002nd  1.7  Ohio  20013rd  3.6  Ohio  2002

获取指定行,指定列的交汇值。先指定列再指定行:

>>> frame1   year   state  pop0  2000    Ohio  1.51  2001    Ohio  1.72  2002    Ohio  3.63  2001  Nevada  2.44  2002  Nevada  2.9>>> frame['pop'][2]3.6000000000000001>>> frame1['state'][3]'Nevada'

DataFrame 对象的增、删、改

增加一列,并所有赋值为同一个值:

>>> frame1['new-clumns'] = 233>>> frame1   year   state  pop  new-clumns0  2000    Ohio  1.5         2331  2001    Ohio  1.7         2332  2002    Ohio  3.6         2333  2001  Nevada  2.4         2334  2002  Nevada  2.9         233

增加一行,并所有赋值为同一个值:

>>> frame1.ix[5] = 'NaN'>>> frame1   year   state  pop  new-clumns0  2000    Ohio  1.5         2331  2001    Ohio  1.7         2332  2002    Ohio  3.6         2333  2001  Nevada  2.4         2334  2002  Nevada  2.9         2335  NaN      NaN  NaN         NaN

删除DataFrame对象的一列

>>> frame1   year   state  pop  new-clumns0  2000    Ohio  1.5         2331  2001    Ohio  1.7         2332  2002    Ohio  3.6         2333  2001  Nevada  2.4         2334  2002  Nevada  2.9         233# 删除DataFrame对象中'new-clumns'这一列>>> del frame1['new-clumns']# 删除'new-clumns'后的DataFrame对象>>> frame1   year   state  pop0  2000    Ohio  1.51  2001    Ohio  1.72  2002    Ohio  3.63  2001  Nevada  2.44  2002  Nevada  2.9

更改DataFrame对象的值

>>> import numpy as np>>> frame1['new-clumns'] = np.arange(5)>>> frame1   year   state  pop  new-clumns0  2000    Ohio  1.5           01  2001    Ohio  1.7           12  2002    Ohio  3.6           23  2001  Nevada  2.4           34  2002  Nevada  2.9           4

追加类型为Series的一列:

>>> need = (frame.state == 'Ohio')>>> need0     True1     True2     True3    False4    FalseName: state, dtype: bool>>> frame1['need'] = need>>> frame1   year   state  pop  new-clumns   need0  2000    Ohio  1.5           0   True1  2001    Ohio  1.7           1   True2  2002    Ohio  3.6           2   True3  2001  Nevada  2.4           3  False4  2002  Nevada  2.9           4  False

DataFrame 对象的命名

DataFrame 对象的行可以命名,同时多列也可以命名:

>>> frame2     pop   state  year1st  1.5    Ohio  20002nd  1.7    Ohio  20013rd  3.6    Ohio  20024th  2.4  Nevada  20015th  2.9  Nevada  2002# 对DataFrame对象的行和列分别命名为‘name’和‘index’>>> frame2.columns.name = 'name'>>> frame2.index.name = 'index'# 命名后的DataFrame对象会显示名称>>> frame2name   pop   state  yearindex                   1st    1.5    Ohio  20002nd    1.7    Ohio  20013rd    3.6    Ohio  20024th    2.4  Nevada  20015th    2.9  Nevada  2002
原创粉丝点击