在使用之前,首先
from pandas import Series,DataFrame
import pandas as pd
pandas对象包括 Series,DataFrame两种
(1) Series的创建:
1)只输入一个列表,自动创建索引。
a=[1,2,3,4,5]
In [3]:
Series(a)
Out[3]:
0 1
1 2
2 3
3 4
4 5
dtype: int64
2)在输入列表的时候输入索引。
a=[1,2,3,4,5]
In [3]:
b=Series(a)
Out[3]:
0 1
1 2
2 3
3 4
4 5
dtype: int64
3)也可以传入一个字典来创建。
可以直接通过 b*2 b[b>0] 这种形式来改变Series里面的数值或者做切片,这和数组是一样的。
pd中的isnull和notnull函数可以用于检测缺失数据。也可以作为Series的实例方法来使用。
b.notnull()
Out[11]:
7 True
8 True
9 True
10 True
11 True
dtype: bool
索引可以通过赋值的方式直接修改。比如
b.index=['q','w','e','r','t']
(2)DataFrame的创建
DataFrame是一个表格型的数据结构。
构建DataFrame的方法:
1)传入由 等长列表或numpy数组 组成的字典data,然后frame=DataFrame(data) 系统会自动加上索引(行名)。
字典的key作为列名,每个values 是每一列。
2)可以调整columns中它们的顺序来调整列的顺序。
frame=DataFrame(data,columns=['year','state','pop'])
‘year’,‘state’,'pop’均是字典data中的键,
3) 指定索引
frame=DataFrame(data,columns=['year','state','pop'],index=['a','b','c','d','e'])
(3)选取列和行
对于DataFrame,选取某一列:
frame['year']
选取某一行:
.loc用于基于标签的索引或
.iloc进行位置索引
.ix已经弃用
frame.iloc['2']
frame.loc['c']
Series对象也适用。
(4)调取值和索引
DataFrame和Series对象 (obj) 都可以通过 .values 返回值,分别返回一个二维数组和一个一维数组。
frame.T 转置
obj.index 返回索引
(5)删除行和列
obj=Series(np.arange(5),index=['a','b','c','d','e'])
In [84]: obj
Out[84]:
a 0
b 1
c 2
d 3
e 4
dtype: int64
In [85]: obj.drop(['b','c'])
Out[85]:
a 0
d 3
e 4
dtype: int64
drop默认删除axis=0也就是行,如果想要删除列的化话,需要加参数axis=1。
(6)索引、选取和过滤
DataFrame(frame)可以像数组那样
frame[:2] #提取前两行
frame[frame['c']>0] #提取'c'>0的几行
frame[frame<5]=0
要选取成块区域的话,可以利用.loc或者.iloc
.loc用于基于标签的索引或
.iloc进行位置索引
.ix已经弃用
data.loc['b':'d',:'state']
这样就和数组的切片变得非常像。
(7)函数的映射
对每个元素做操作:
对于Series对象obj,使用的是map方法。
obj.map(f) #对obj里的每一个元素执行函数f,返回结果
对于DataFrame对象,使用的是applymap方法。
frame.applymap(f) #对data里的每一个元素执行函数f,返回结果
如果要对每一列或者每一行的数据数组做映射:
frame.apply(f)
frame.apply(f,axis=1)
(8)pandas对象的排序
对于DataFrame对象,使用的是sort_index方法。
frame.sort_index() #按照行索引(行名)进行升序排序
frame.sort_index(axis=1) #按照列索引(列名)进行升序排序
frame.sort_index(ascending=False) #按照行索引(行名)进行降序排序
frame.sort_index(by='a') #按照列名'a'所在的这一列进行升序排序
对于Series对象,要按照值排序的话,使用的是order方法。
obj.order()
(9)汇总和计算描述统计
计算pandas对象(data)的和的方法和数组类似。
frame.sum()
frame.sum(axis=1)
frame.cumsum()
frame.idxmax() #返回最大值的索引
这些方法对Series对象同样适用。
data.describe() 产生汇总统计
(10)唯一值和值技术
data.unique() #得到唯一值数组
data.value_counts() #统计每个值的频率
(11)处理缺失数据
data.fillna(0) #用0填充缺失值
data.dropna() #如果是Series对象,丢弃NaN,如果是DataFrame对象,丢弃含有NaN的这一行
也可以对不同的列填充不同的值。
(12)层次化索引
data=Series(np.random.randn(10),index=[['a','a','a','b','b','b','c','c','d','d'],[1,2,3,1,2,3,1,2,2,3]])
data
Out[186]:
a 1 -0.354439
2 2.521583
3 -0.219593
b 1 -0.069102
2 0.381834
3 0.623784
c 1 0.742525
2 -1.916756
d 2 -0.364809
3 0.970749
dtype: float64
unstack()放法重新安排到一个DataFrame中,也可以再使用stack()方法恢复。
data=data.unstack()
data=data.stack()
(13)使用DataFrame的列
frame.set_index(['c','d']) #设置'c' 'd'两列为索引(层次化),同时在数据中删掉这两列
frame.set_index(['c'],drop=False) #不在数据中删掉这两列
frame.reset_index() #把索引还原回去
(14)DateFrame行名、列名
frame.columns #返回列名
frame.index #返回行名(索引)