美文网首页
pandas库学习(二) DataFrame

pandas库学习(二) DataFrame

作者: 3ni | 来源:发表于2018-11-01 13:36 被阅读0次

DataFrame是一个表格型的数据结构,它有一组有序的列,每一列可以是不同的值类型(比如数值,字符串等类型)。DataFrame既有行索引,也有列索引,它可以看做是由Series组成的字典,比如:
from pandas import 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]}
frame=DataFrame(data)
print frame

   pop   state  year
0  1.5    Ohio  2000
1  1.7    Ohio  2001
2  3.6    Ohio  2002
3  2.4  Nevada  2001
4  2.9  Nevada  2002

最左边的是DataFrame的索引,和Series一样。
从结果看,它并没有按照我们输入的顺序进行排序,但是我们可以指定相应的顺序进行排序。比如:
print DataFrame(data,columns=['year','state','pop'])

   year   state  pop
0  2000    Ohio  1.5
1  2001    Ohio  1.7
2  2002    Ohio  3.6
3  2001  Nevada  2.4
4  2002  Nevada  2.9

和Series一样,如果传入的列在数据中找不到,就会产生NaN值,比如:
print DataFrame(data,columns=['year','state','pop','debt'])

   year   state  pop debt
0  2000    Ohio  1.5  NaN
1  2001    Ohio  1.7  NaN
2  2002    Ohio  3.6  NaN
3  2001  Nevada  2.4  NaN
4  2002  Nevada  2.9  NaN

同Series一样,你可以定制自己的索引,比如:
print DataFrame(data,columns=['year','state','pop','debt'],index=['one','tow','three','four','five'])

       year   state  pop debt
one    2000    Ohio  1.5  NaN
tow    2001    Ohio  1.7  NaN
three  2002    Ohio  3.6  NaN
four   2001  Nevada  2.4  NaN
five   2002  Nevada  2.9  NaN

当得到一个DataFrame对象时,可以查看列的名字,比如:
print frame.columns

Index([u'pop', u'state', u'year'], dtype='object')

由于DataFrame是一个二维的,所以我们可以从中获取一个一维的Series,比如:
print frame['state']

0      Ohio
1      Ohio
2      Ohio
3    Nevada
4    Nevada
Name: state, dtype: object

也可以这样:
print frame.state
结果和上面一样

上面操作都是对列,我们也可以对行进行操作,比如取出一行:
print frame.ix[1] ix表示对行进行操作

pop       1.7
state    Ohio
year     2001
Name: 1, dtype: object

接下来对DataFrame进行修改,比如对某一列进行修改
frame['year']=1995
print frame

   pop   state  year
0  1.5    Ohio  1995
1  1.7    Ohio  1995
2  3.6    Ohio  1995
3  2.4  Nevada  1995
4  2.9  Nevada  1995

也可以这样
frame['year']=np.arange(2000,2005)
print frame

   pop   state  year
0  1.5    Ohio  2000
1  1.7    Ohio  2001
2  3.6    Ohio  2002
3  2.4  Nevada  2003
4  2.9  Nevada  2004

注意赋值给列的长度要一致,如果是Series,则会根据索引进行匹配,空位会填上NaN

如果直接给DataFrame赋值一个不存在的列,则会直接添加一个新列,比如:
现在frame内容如下:

   pop   state  year
0  1.5    Ohio  2000
1  1.7    Ohio  2001
2  3.6    Ohio  2002
3  2.4  Nevada  2003
4  2.9  Nevada  2004

执行如下操作后:
frame['eastern'] = np.arange(5)
注意这样操作是不行的frame.eastern=np.arange(5)
print frame

   pop   state  year  eastern
0  1.5    Ohio  2000        0
1  1.7    Ohio  2001        1
2  3.6    Ohio  2002        2
3  2.4  Nevada  2003        3
4  2.9  Nevada  2004        4

使用关键字del来删除一个列
比如:
del frame['eastern']

还有一种常见的数据形式,就是字典的字典,比如如下:
pop={'Nevada':{2001:2.4,2002:2.9},'Ohio':{2000:1.5,2001:1.7,2002:3.6}}
frame2 = DataFrame(pop)
print frame2

      Nevada  Ohio
2000     NaN   1.5
2001     2.4   1.7
2002     2.9   3.6

可以看到,外层字典的键被作为列,内层的键被作为行索引
它还可以像矩阵一样进行转置,比如:
print frame2.T

        2000  2001  2002
Nevada   NaN   2.4   2.9
Ohio     1.5   1.7   3.6

返回DataFrame中的数据
print frame2.values

array([[nan, 1.5],
       [2.4, 1.7],
       [2.9, 3.6]])

如果DataFrame各列的数据类型不同,则数组的数据类型就会选用能兼容所有列的数据类型

相关文章

网友评论

      本文标题:pandas库学习(二) DataFrame

      本文链接:https://www.haomeiwen.com/subject/hcgtxqtx.html