要使用pandas,首先要熟悉他的两个主要的数据结构:Series和DataFrame。
一、Series
Series 是一种类似于一维数组的对象,由一组数据(各种numpy数据类型)以及一组与之相关的数据标签(即索引)组成。
仅由一组数据即可产生最简单的Series:
>>> from pandas import Series,DataFrame
>>> import pandas as pd
>>> obj=pd.Series([4,7,-5,3])
>>> obj
0 4
1 7
2 -5
3 3
dtype: int64左边是索引,右边是值,这样看起来Series好像更像dict或map这一类具有键值对的结构。>>> obj.values #值
array([ 4, 7, -5, 3], dtype=int64)
>>> obj.index #索引对象
RangeIndex(start=0, stop=4, step=1)分别获得值对象与索引对象。手动指定索引
>>> obj1=Series([4,7,-5,3],index=['a','b','d','c'])
>>> obj1
a 4
b 7
d -5
c 3
dtype: int64通过索引取值:
>>> obj1['a']
4
>>> obj1[['a','d','b']] #获取多个值
a 4
d -5
b 7
dtype: int64数组运算:
>>> obj1[obj1>0]
a 4
b 7
c 3
dtype: int64
>>> obj1*2
a 8
b 14
d -10
c 6
dtype: int64既然Series的结构很像dict,自然也可以通过一个dict去创建Series
>>> sdata={'ohio':3500,'Texas':710,'Utah':500}
>>> obj2=Series(sdata)
>>> obj2
Texas 710
Utah 500
ohio 3500
dtype: int64name属性,Series对象本身及其索引都有一个name属性>>> obj2.index.name='state'
>>> obj2.name='population'
>>> obj2
state #索引名
Texas 710
Utah 500
ohio 3500
Name: population, dtype: int64 #Series名二.DataFrame
DataFrame是一个表格型的数据结构,含有一组有序的列,每列可以是不同的值类型(数值,字符串,布尔值等)。DataFrame既有行索引也有列索引,可以被看做是由Series组成的字典。DataFrame中的数据是以一个或多个二维块存放的。
构建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)
>>> 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(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如果传入的列找不到,则会产生NAN
>>> frame2=DataFrame(data,columns=['year','state','pop','debt'] ,index=['one','two','three','four','five'])
>>> frame2
year state pop debt
one 2000 Ohio 1.5 NaN
two 2001 Ohio 1.7 NaN
three 2002 Ohio 3.6 NaN
four 2001 Nevada 2.4 NaN
five 2002 Nevada 2.9 NaN取值,通过类似数组或属性的方式,可以获取某一列的数据(为一个Series)
>>> frame2['state'] #类似数组的方式
0 Ohio
1 Ohio
2 Ohio
3 Nevada
4 Nevada
Name: state, dtype: object
>>> frame2.year #类似属性的方式
0 2000
1 2001
2 2002
3 2001
4 2002
Name: year, dtype: int64注意,返回的Series拥有原DataFrame相同的索引,且其name属性也已经被相应的设置好了。获取行,行也可以通过位置或名称的方式来进行获取,比如用索引字段ix
>>> frame2.ix[2]
year 2002
state Ohio
pop 3.6
debt NaN
Name: 2, dtype: object列可以通过赋值的方式进行修改。如下,我们可以给空的”debt“列赋值一个标量或一组值。>>> import numpy as np
>>> frame2['dept']=np.arange(5) #为不存在的列赋值会创建一个新列
>>> frame2['debt']=12
>>> frame2
year state pop debt dept
0 2000 Ohio 1.5 12 0
1 2001 Ohio 1.7 12 1
2 2002 Ohio 3.6 12 2
3 2001 Nevada 2.4 12 3
4 2002 Nevada 2.9 12 4删除,关键词del用于删除列
>>> del frame2['pop']
>>> frame2
year state debt dept
0 2000 Ohio 12 0
1 2001 Ohio 12 1
2 2002 Ohio 12 2
3 2001 Nevada 12 3
4 2002 Nevada 12 4另一种常见的数据形式是嵌套字典(也就是字典的字典),将它传给DataFrame,就会被解释为:外层字典的键作为列,内层键作为行索引。>>> pop={'Nevada':{2001:2.4,2002:2.9},'Ohio':{2000:1.5,2001:1.7, 2002:3.6}}
>>> frame3=DataFrame(pop) #使用嵌套字典构造DataFrame
>>> frame3
Nevada Ohio
2000 NaN 1.5
2001 2.4 1.7
2002 2.9 3.6对结果进行 转置:>>> frame3.T
2000 2001 2002
Nevada NaN 2.4 2.9
Ohio 1.5 1.7 3.6设置index和columns的name属性:
>>> frame3.index.name='year'
>>> frame3.columns.name='state'
>>> frame3
state Nevada Ohio
year
2000 NaN 1.5
2001 2.4 1.7
2002 2.9 3.6
可以用于构造DataFrame的数据:
三、索引对象
pandas的索引对象负责管理标签和其他元数据(比如轴名称等)。构建Series或DataFrame时,所用到的任何数组或其他序列的标签都会被转换成一个Index:
>>> obj=Series(range(3),index=['a','b','c'])
>>> obj.index
Index([u'a', u'b', u'c'], dtype='object')Idex对象是不可修改的,因此用户不能对其修改。不可修改性非常重要,因为这样才能使得index对象在多个数据结构之间安全共享:>>> index=pd.Index(np.arange(3))
>>> obj2=Series([1.5,-2.5,0],index=index)
>>> obj2.index is index
True
index的方法和属性:

参考:
《利用python进行数据分析》
本文介绍了Pandas库中两种核心数据结构Series和DataFrame的基本操作方法,包括构建、索引、切片、运算等,并展示了如何利用索引对象进行数据管理。

665

被折叠的 条评论
为什么被折叠?



