pandas 学习笔记一

笔记来源:利用python进行数据分析【Wes Mckinnney著,唐学韬等译】

 

一、pandas的数据结构介绍【主要包括Series、DataFrame】

介绍:pandas名称为panel data(面板数据),其基于NumPy构建的

1、Series

(1)简单构建

Series是一种类似于一维数组的对象,有一组数据(可为NumPy数据类型)及一组与之相关的数据标签(索引)组成,若只有一组数据,则产生的是最简单的Series

(2)获取值及索引属性【.values    .index】

由上述可知,Series的表现形式为,索引在左边,值在右边。因为上述没有为数据进行指定索引,其则会自动创建0-N-1(N为数据长度)的整数型索引,可使用values、index属性分别获取Series的表达形式和索引对象。

(3)传入自己定义的索引并取相应位置的值

创建含有自己定义的索引数据,创建内部传入第二个参数,该参数为index,其赋为一个列表形式,若取其中的一个值,一层列表传入键即可,如果取多个值,则两层列表传入多个键。

(4)Series 相关计算

(5)字典形式构建Series【键为索引,值为Series值】

(6)传入字典,默认字典的键作为索引,但也可重新定义索引。如下使用指定列表,传入的列表索引如果在原字典索引中有,则返回的值即为原索引对应的值,如果新索引在原索引中没有,则返回结果为NaN

【sdata中与states索引相匹配的那3个值会被找出了放到相应的位置上,但是由于‘California’所对应的sdata值找不到,返回结果为NaN,代表确实数据】

(7)检查是否为缺失数据(  pd.isnull()   pd.notnull()  ), 返回与原来相同长度的布尔型结果

(8)算术运算,自动对齐不同索引数据

(9)Series对象的name属性与索引的name属性【也可对索引name】

(10)Series索引直接通过赋值进行修改

2、DataFrame

DataFrame是一个表格型的数据结构,含有有序的列,每列可是不同的值类型(如:数值、字符串、布尔值等)。其既有行索引、也有列索引。可以理解为有Series组成的字典(共同使用一个索引

(1)创建方法

 1)传入字典,字典内再传入列表【字典的键:DataFrame的列名、字典的值(列表元素):DataFrame的值】

常用的方法是直接传入一个由等长列表或NumPy数组组成的字典。并且行索引会自动加上(从0开始).可以对列索引按照指定顺序进行排序【columns关键字传入】

如果原来传入的数据已经有了列索引,我们再给其传入列索引,那么结果将和Series类似。即先在传入的数据中,有则返回原来数据对应的值,无则返回NaN值。如下【原列索引含有‘year’,‘state’,‘pop’,则这三个返回原来对应的值,但是‘debt’新增的列索引名在原来数据中没有,则返回值为NaN】

2)字典的嵌套(字典的字典)【最外层字典的键:DataFrame的列名、第二次字典的键:DataFrame的每行索引。第二层字典的值:DataFrame的值】

显示传入指定索引

其中新传入的索引没有对应值,则返回NaN 

(2)获取指定位置的数据或对指定位置数据进行赋指定值

1)只获取指定列数据

直接通过DataFrame列表传入列名的形式或者.列名的方式获取。将得到一个Series数据(返回含有行索引)

2)三种获取指定位置数据的方式区别(.ix   .loc   .iloc)

loc【索引名称】:内部传入参数以列表形式传入(内容是索引名称,不能为索引号【除非索引名称即为索引号】

如果loc的索引名称即为索引号(为数字时),还可以进行切片操作【但这里的切片包含第一个与最后一个![含尾索引]

iloc【索引号】:内部传入参数以列表形式传入(内容是索引号,不能为索引名称)不管行列均用索引号【切片不含尾索引

ix【索引名称与索引号均可用】:是loc、iloc的结合体.可以混合使用索引名称与索引号

提示:ix使用提示其将被弃用。以后将使用以上两者(loc——通过行标签索引行数据 
iloc——通过行号索引行数据。)进行替代

3) 对指定列进行赋值,可以为标量值,也可以为一组值【这组值必须与行数相匹配】

4)对指定列进行赋值,赋值为一个Series【如果精确匹配DataFrame的索引,则所有位置即被填充,否则为NaN】

5)对之前为出现的列进行赋值则会创建一个新的列,关键字del用于删除列【如下''eastern"之前未出现过,则会新创建】

(3)DataFrame的index和columns的name属性【index.name、columns.name、.values】

3、索引对象

pandas的索引对象负责管理轴标签和其他元数据(如轴名称等),构建Series或DataFrame时,所用到的任何数组或其他序列的标签都会被转换为一个Index

谨记:Index对象是不可修改的,从而保证了其在多个数据结构件安全共享

每个索引均有一些方法和属性。如下列出了Index的一些方法和属性

方法说明
append连接另一个Index对象,产生一个新的Index
diff计算差集,得到一个Index
intersection计算交集
union计算并集
isin计算一个指示各值是否都包含在参数集合中的布尔值数组
delete删除索引i处的元素,并得到新的Index
drop删除传入的值,并得到新的Index
insert将元素插入到索引i处,并得到新的Index
is_monotonic当元素均大于等于前一个元素时,即顺序递增或不变,返回True
is_unique是否为唯一值,当Index没有重复值时,返回True
unique计算Index中唯一值的数组

二、基本功能(p126)

1、重新索引【reindex()】

pandas对象的一个重要方法就是reindex.其主要用于创建一个适应新索引的新对象。

(1)单纯的重新索引【新索引代替原索引,如果原来无该索引,则新创建的索引默认对应值为NaN(表示缺失值)】

(2) 重新索引后,对新增的索引进行缺失值填充

1) 固定赋值填充

2)前向填充(新索引(新增)对应的值根据前一个索引(原存在)进行填充(与前一个索引相同的值),使用传入method=‘ffill’或‘pad’)

3)后向填充(意思让新索引(新增)对应的值根据后一个索引(原存在)进行填充(与后一个索引相同的值),使用传入method=‘bfill’或‘backfill’)

(3) DataFrame的重新索引(可修改行、列索引)

1)当仅传入一个序列时,重新索引行

2) 传入列重新索引列【原有则取原值,原无则为NaN值】

2、丢弃指定轴上的项(drop()方法)

(1)Series()相关

.drop()方法后有返回值,返回的即为丢弃后的内容,不改变drop()之前的内容

(2)DataFrame相关

其可删除任意轴上的索引值。【丢弃指定列,axis=1

3、索引、选取、过滤

(1)Series索引相关【与NumPy数组索引类似,但Series索引不仅限整数】

1)取指定值

2) 使用标签进行切片【与python切片不同,这里标签切片含末端元素】

(2)DataFrame相关

1) 普通索引或索引标签取指定位置值【与上述Series类似】

2) 使用ix取指定位置的值



3)DataFrame的索引选项

类型说明
obj[val] 选DataFrame的单个列或一组列。如在布尔型数组(过滤行)、切片(行切片)、布尔型DataFrame时求解便利
obj.ix[val]选取DataFrame的单个行或一组行
obj.ix[:,val]选取单个列或列子集
obj.ix[val1,val2]同时选取行、列
reindex方法将一个或多个轴匹配到新索引
xs方法根据标签选取单行或单列,并返回一个Series
icol、irow方法根据整数位置选取单列或单行,并返回一个Series
get_value、set_value方法根据行标签和列标签选取单个值

4、算术运算和数据对齐

pandas最重要的功能,可对不同索引的对象进行算术运算。对象相加时,存在不同索引,则结果为索引对的并集

(1)简单的算术计算

1)Series

2) DataFrame

(2) 在算术方法中填充值

1) add()

2)reindex()重新索引,指定填充值

(3)DataFrame和Series之间的运算

1) 简单NumPy数组广播计算示例

2)DataFrame与Series之间的广播计算也类似,如下示

3)两者进行相加计算,索引进行求并集,但是非共同索引值为NaN,共同索引值才有值

4) 两者进行相减时,按某个轴进行操作

5、函数应用和映射

NumPy的unfunc(元素级数组方法)也可以操作pandas对象

(1)np.abs()【求绝对值】

(2) .apply()的使用【将函数应用到各列或行形成一维数组】

(3)applymap() 的使用 

而Series对应的应用元素级函数为map方法

6、排序和排名

(1)按索引排序【sort_index()函数,可传入轴向axis、顺序逆序值ascending】

(2) 按数值进行排序【python2用order方法、python3用sort_values方法】

1)Series按值排序

2) DataFrame按值排序

(3)排名rank方法【会增设一个排名值,从1开始,与numpy.argsort类似】

1).rank()有返回值,不影响原来的数据。返回的值是值的排名,如有多个值,求平均排名【默认method = ‘average’】。

2)当传入参数时method =‘first’时,不求平均排名【按原始数据中的出现顺序分配排名,出现越前,排名越靠前】

3) 降序排名,则传入参数ascending = False【即值最大排名序号越小,即最大值排名为1】

4) 排名时用于破坏平级关系的method选项

method说明
"average"默认:在相等的分组中,为各个值分配平均排名
"min"使用分组中的最小排名【可能有重复排名】
"max"使用整个分组中的最大排名【可能有重复排名】
"first"按值在原始数据中的出现顺序分配排名

7、带有重复值的索引

(1)索引是否为唯一值(is_unique())

(2)按索引取值

(3)DataFrame进行行索引取值

 

参考:

[1]. McKinney,W.著;唐学韬等译. 利用python进行数据分析[M]. 北京:机械工业出版社,2013.9.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值