利用python进行数据分析(三):pandas--处理数据的工具
2017-11-23 15:08
1321 查看
在使用之前,首先
pandas对象包括 Series,DataFrame两种
(1) Series的创建:
1)只输入一个列表,自动创建索引。
2)在输入列表的时候输入索引。
3)也可以传入一个字典来创建。
可以直接通过 b*2 b[b>0] 这种形式来改变Series里面的数值或者做切片,这和数组是一样的。
pd中的isnull和notnull函数可以用于检测缺失数据。也可以作为Series的实例方法来使用。
索引可以通过赋值的方式直接修改。比如
(2)DataFrame的创建
DataFrame是一个表格型的数据结构。
构建DataFrame的方法:
1)传入由 等长列表或numpy数组 组成的字典data,然后frame=DataFrame(data) 系统会自动加上索引(行名)。
字典的key作为列名,每个values 是每一列。
2)可以调整columns中它们的顺序来调整列的顺序。
‘year’,’state’,’pop’均是字典data中的键,
3) 指定索引
(3)选取列和行
对于DataFrame,选取某一列:
选取某一行:
.loc用于基于标签的索引或
.iloc进行位置索引
.ix已经弃用
Series对象也适用。
(4)调取值和索引
DataFrame和Series对象 (obj) 都可以通过 .values 返回值,分别返回一个二维数组和一个一维数组。
frame.T 转置
obj.index 返回索引
(5)删除行和列
drop默认删除axis=0也就是行,如果想要删除列的化话,需要加参数axis=1。
(6)索引、选取和过滤
DataFrame(frame)可以像数组那样
要选取成块区域的话,可以利用.loc或者.iloc
.loc用于基于标签的索引或
.iloc进行位置索引
.ix已经弃用
这样就和数组的切片变得非常像。
(7)函数的映射
对每个元素做操作:
对于Series对象obj,使用的是map方法。
对于DataFrame对象,使用的是applymap方法。
如果要对每一列或者每一行的数据数组做映射:
(8)pandas对象的排序
对于DataFrame对象,使用的是sort_index方法。
对于Series对象,要按照值排序的话,使用的是order方法。
(9)汇总和计算描述统计
计算pandas对象(data)的和的方法和数组类似。
这些方法对Series对象同样适用。
data.describe() 产生汇总统计
(10)唯一值和值技术
(11)处理缺失数据
也可以对不同的列填充不同的值。
(12)层次化索引
unstack()放法重新安排到一个DataFrame中,也可以再使用stack()方法恢复。
(13)使用DataFrame的列
(14)DateFrame行名、列名
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进行数据分析 pandas基础: 处理缺失数据
- 利用Python进行数据分析(10) pandas基础: 处理缺失数据
- 利用Python进行数据分析(10) pandas基础: 处理缺失数据
- 利用python进行数据分析——pandas
- 利用Python进行数据分析(11) pandas基础: 层次化索引
- 利用Python进行数据分析(8) pandas基础: Series和DataFrame的基本操作
- 利用Python进行数据分析——pandas入门(五)(4)
- 利用python进行数据分析-pandas入门3
- 利用Pythonj进行数据分析学习笔记——第五章 pandas入门
- 利用Python进行数据分析(7) pandas基础: Series和DataFrame的简单介绍
- 利用python进行数据分析之pandas库的应用(一)
- 利用python进行数据分析-pandas入门
- 利用python进行数据分析-pandas.concat/subplots/gropuby/pivot_table,多文件整合、聚合、分组,子图
- 利用Python进行数据分析(13) pandas基础: 数据重塑/轴向旋转
- 利用python进行数据分析——之数据结构pandas(一)
- 利用 Python 进行数据分析(十二)pandas:数据合并
- 利用 Python 进行数据分析(二)尝试处理一份 JSON 数据并生成条形图
- 利用Python进行数据分析(15) pandas基础: 字符串操作
- 利用python进行数据分析之pandas库的应用(二)
- 利用 Python 进行数据分析(八)pandas 基本操作(Series 和 DataFrame)