pandas中的数据结构主要包括:Series、DataFrame、Panel

通常在使用时,需要导入相应的对象

from pandas import Series, DataFrame
import pandas as pd

Series

Series是类似于一维数组的对象,由一组数据(Numpy数据类型)及与之相关的标签索引组成。

创建简单的Series,此时默认建立整数型索引

obj = Series([4, 7, -5, 3])

查看Series的取值与索引

obj.values
obj.index

指定索引

obj2 = Series([4, 7, -5, 3], index=['d', 'b', 'a', 'c'])

Series对象本身与索引都有name属性

obj4.name = 'population'
obj4.index.name = 'state'

赋值

Series可以通过索引方式取值或赋值

obj2['a']
obj2['d'] = 6
obj2[['c', 'a', 'd']]

通过布尔索引取值

obj2[obj2>0]

对Series运算

obj2*2
np.exp(obj2)

索引

Series可以看做定长的有序字典

'b' in obj2
'e' in obj2

如果数据存储在Python字典,可以直接通过字典创建Series

sdata = {'Ohio': 35000, 'Texas': 71000, 'Oregon': 16000, 'Utah': 5000}
obj3 = Series(sdata)

此时,如果重新指定索引,由于sdata与states匹配值只有3个,则California对应的值为NaN

states = ['California', 'Ohio', 'Oregon', 'Texas']
obj4 = Series(sdata, index=states)

可以使用isnull或notnull检测数据是否缺失

pd.isnull(obj4)
pd.notnull(obj4)
obj4.isnull()

Series在运算中会自动对齐不同索引的数据

obj3+obj4

California         NaN
Ohio           70000.0
Oregon         32000.0
Texas         142000.0
Utah               NaN
dtype: float64

DataFrame

DataFrame既有行索引,也有列索引,与R的data.frame相比,DataFrame中面向行与列的操作基本平衡。

构建DataFrame最常用的方法是直接传入等长列表或Numpy数组组成的字典

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)

如果指定列的顺序,则DataFrame会按照指定顺序排列

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

有时会使用嵌套字典的方式创建DataFrame

pop = {'Nevada': {2001: 2.4, 2002: 2.9},
       'Ohio': {2000: 1.5, 2001: 1.7, 2002: 3.6}}

frame3 = DataFrame(pop)

DataFrame的index和columns也可以设置name属性

frame3.index.name = 'year'; frame3.columns.name = 'state'

DataFrame的值返回二维ndarray

frame3.value

查看DataFrame的元素类型

df2.dtypes

查看DataFrame的头部数据

df.head()

查看DataFrame尾部数据

df.tail(3)

查看DataFrame是否为NaN

df.notnull()

查看DataFrame的快速统计

df.describe()

DataFrame的转置

df.T

列操作

获取DataFrame的列

frame2['state']
frame2.year

此时返回的Series拥有与DataFrame相同的索引。

DataFrame的列可以通过赋值的方式修改,比如给予标量或一组值

frame2['debt'] = 16.5
frame2

frame2['debt'] = np.arange(5.)
frame2

当使用列表或数组为某列赋值时,需要注意长度匹配,或者是索引匹配

val = Series([-1.2, -1.5, -1.7], index=['two', 'four', 'five'])
frame2['debt'] = val

为不存在的列赋值,从而创建新列

frame2['eastern'] = frame2.state == 'Ohio'

使用del关键字可以删除某列

del frame2['eastern']

行操作

行可以通过位置或名称取值

frame2.ix['three']

Panel

可以使用DataFrame组成的字典,或三维ndarray创建Panel对象

import pandas.io.data as web

pdata = pd.Panel(dict((stk, web.get_data_yahoo(stk))
                       for stk in ['AAPL', 'GOOG', 'MSFT', 'DELL']))

Panel中的每个项都是一个DataFrame,比如,选取指定日期或日期范围内的所有数据

pdata.ix[:, '6/1/2012', :]

将面板数据以堆积式的DataFrame展现

stacked = pdata.ix[:, '5/30/2012':, :].to_frame()

而to_panel是上面的逆运算

stacked.to_panel()

results matching ""

    No results matching ""