首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

玩转Pandas,让数据处理更easy系列2

01

回顾

上一篇总结了Pandas中最重要的两个数据结构:Series和DataFrame,前者相当于更加强大的一维数组,是数组和字典的组合,因为既可以按照位置,也能通过键获取访问元素;而DataFrame是Series的容器,二维的数组,有行、列标签。正是通过这两个强大的数据结构和基于它们建立的各种操作,才使得Pandas称霸数据处理领域工具库,关于这篇请参考:

玩转Pandas,让数据处理更easy系列1

02

DataFrame结构剖析

因为DataFrame本质上是二维数组,其中values是Numpy,行索引是index,列索引是 columns的组合。接下来,创建一个pd_data,分别作如下操作:

#创建pd_data,values是二维list,index默认(0,1,2,...),columns: ['A','B','C'] pd_data = pd.DataFrame([ [4, 9, 1], [3, 5, 2] ], columns = list('ABC') )

获取values,可以看出是ndarray的Numpy数组,因此可以使用ndarray实例的一切API:

pd.values

获取index,可以看到返回RangeIndex实例,是默认的行索引,查源码可以看出继承关系如下:

Index

|

NumericIndex

|

Int64Index

|

RangeIndex

pd_data.index

获取columns,直接返回Index实例,可以看到pd_data的列索引:

pd_data.columns

以上,可以看出pd_data的基本组成结构,以及如何拆分出所需要的values和索引(index,columns)结构。

03

DataFrame索引

DataFrame的索引可以按照一维索引方式,或二维索引方式。

一维索引方式,类似于numpy等的冒号直接索引,但是这种方法只能通过列索引标签获取,如下,返回的是一个Series实例,name是索引的列标签名称。

pd_data['B']

二维索引常用的 loc 接口,提供二维的访问方法,用法如下:

pd_data.loc[1,'B']

得到是元素5,即行索引标签为1,列标签为‘B’的元素

插播:

  • loc的作用不是仅仅用作访问某个已存在的元素。
  • 因为说过,columns, index的作用类似于字典,言外之意,如果访问的标签不存在,它会自动添加进去,如下:

pd_data.loc[:,'D'] = 10 #增加一列,列标签是'D' pd_data['D'] = 10 # 直接这样写更精简,但是默认必须为添加列标签

pd_data.loc[-1,:] = 0 #增加一行,行标签是 -1

pd_data[-1] = -11 # No! 这样写不是添加一行

04

DataFrame删除某列或某行

删除DataFrame的某行或某列,调用drop(),参数是标签值,如下:

现在的pd_data:

删除'E'列,ok, 调用 drop('E',axis=1),axis参数必须给出!

pd_data = pd_data.drop('E',axis=1) #注意必须赋值给pd_data,因为这不是in-place drop

删除标签为-1的行:

pd_data = pd_data.drop(-1,axis=0)

测试如果标签为-1的行有多个,删除会发生,再构造标签为-1的行:

pd_data = pd_data.append(pd.Series([1]*5, index=['A,'B','C','D',-1], name=1)) pd_data

删除标签为1的行,可以看到同时删除了两行。

pd_data = pd_data.drop(1,axis=0) pd_data

以上总结了,DataFrame的结构,索引,增加,删除操作,如有问题,请指正。

下载源码,请在公众号后台回复: pandas

更多文章:

深度学习|大师之作,必是精品

算法channel关键词和文章索引

算法优化|说说哨兵(sentinel value)

Numpy|需要信手拈来的功能

机器学习|快速排序思想求topk

机器学习|支持向量机参数求解

下一篇
举报
领券