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各列的数据类型不同,则数组的数据类型就会选用能兼容所有列的数据类型
网友评论