您的位置:首页 > 编程语言 > Python开发

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

2017-11-23 15:08 1321 查看
在使用之前,首先

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.
b651
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      #返回行名(索引)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据分析 python