利用python进行数据分析(三):pandas--处理数据的工具

在使用之前,首先

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      #返回行名(索引)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值