【python】pandas库

文章目录

  • 简单介绍
  • Series数据结构
  • DataFrame数据结构
  • 索引对象
  • 基本功能
    • reindex重新索引
    • drop丢弃指定轴上的项
    • 索引、选取和过滤
    • 用loc和iloc进行选取
    • 算法运行数据对齐
    • DataFrame和Series之间的运算
    • 函数应用和映射
    • 排名和排序


简单介绍

pandas是python进行数据分析中非常重要的一个库,它主要有两种数据结构SeriesDataFrame,先从了解pandas中的两种数据结构及用法开始,后面再进行高级操作学习。


Series数据结构

Series是一种类似于一维数组的对象,它由一组数据(各种NumPy数据类型)以及一组与之相关的数据标签(即索引)组成。仅由一组数据即可产生最简单的Series:
【python】pandas库_第1张图片
可以理解为:Series索引index+值value组成

这里是没有指定索引,默认是会自动创建一个0到N-1(N为数据的长度)的整数型索引。

你可以通过Series 的values和index属性获取其数组表示形式和索引对象:
在这里插入图片描述自己创建对应的索引(只需要指定index属性即可,与值一一对应):
【python】pandas库_第2张图片如何去取值?通过索引变量名[索引]或者变量名[[索引列表]]来取单个或者多个值:
【python】pandas库_第3张图片

可以看到取单个时返回的是一个标量,多个是Series数据类型。

还有一些类似numpy运算,对数据进行过滤:
【python】pandas库_第4张图片
将Series看成是一个定长的有序字典,是索引值到数据值的一个映射。它可以用在许多原本需要字典参数的函数中:
(1)判断某个索引是否存在:in
在这里插入图片描述(2)还可以通过python字典来创建Series数据结构,键值key–索引indexvalue值–value值
【python】pandas库_第5张图片

我不需要字典里面的全部数据,而且希望按一定顺序。只需要指定index属性,按照你想要的顺序和数据给定index,程序会把你指定的索引与字典进行一一配对,没找到的赋予NaN

【python】pandas库_第6张图片NaNNot a Number可以通过isnull或者notnull方法来查看数据中是否存在NaN值:
【python】pandas库_第7张图片

两个Series数据结构进行操作时,索引标签会自动对齐数据:

【python】pandas库_第8张图片
Series对象本身及其索引都有一个name属性,该属性跟pandas其他的关键功能关系非常密切,可以先了解一下:
【python】pandas库_第9张图片
Series的索引可以通过赋值的方式就地修改:
【python】pandas库_第10张图片


DataFrame数据结构

  • DataFrame是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔值等)。
  • DataFrame既有行索引也有列索引,它可以被看做由Series组成的字典(共用同一个索引)。
  • DataFrame中的数据是以一个或多个二维块存放的(而不是列表、字典或别的一维数据结构)。

可以直接传入一个由等长列表或NumPy数组组成的字典来创建DataFrame
【python】pandas库_第11张图片行索引+列索引的二维数据
对于数据量较多的,可以调用head方法只显示前5行:
【python】pandas库_第12张图片传入字典创建DataFrame的列索引是随机的,可以在创建时指定columns属性来创建需要的顺序列索引:
【python】pandas库_第13张图片如果传入的列在数据中找不到,就会在结果中产生缺失值,同上也可以指定index行索引:
【python】pandas库_第14张图片DataFrame的每一列可以看成一个Series,name列名,索引行索引,可以通过DataFrame[列索引名]来得到一个Series:
【python】pandas库_第15张图片
默认取得一列,取一行的数据可以通过loc属性来取,后面将详细介绍这个属性:
【python】pandas库_第16张图片

其他一些增删改的操作:

可以直接对一列进行赋值:
(1)单个标量,会广播到这一列全部
【python】pandas库_第17张图片(2)将列表或数组赋值给某个列时,其长度必须跟DataFrame的长度相匹配。
【python】pandas库_第18张图片(3)如果赋值的是一个Series,就会精确匹配DataFrame的索引,所有的空位都将被填上缺失值:
【python】pandas库_第19张图片(4)为不存在的列赋值会创建出一个新列:
【python】pandas库_第20张图片
删除用del关键字

【python】pandas库_第21张图片

嵌套字典传给DataFrame,pandas就会被解释为:外层字典的键作为列,内层键则作为行索引:

【python】pandas库_第22张图片
可以使用类似NumPy数组的方法,对DataFrame进行转置(交换行和列):
【python】pandas库_第23张图片也可以指定index属性来改变顺序:
【python】pandas库_第24张图片由Series组成的字典差不多也是一样的用法:
【python】pandas库_第25张图片
DataFrame构造函数所能接受的各种数据:
【python】pandas库_第26张图片
和Series一样,DataFrame也有name属性,行和列都有:
【python】pandas库_第27张图片跟Series一样,values属性也会以二维ndarray的形式返回DataFrame中的数据:
【python】pandas库_第28张图片


索引对象

pandas的索引对象负责管理轴标签和其他元数据(比如轴名称等)。构建Series或DataFrame时,所用到的任何数组或其他序列的标签都会被转换成一个Index:
【python】pandas库_第29张图片Index对象是不可变的,因此用户不能对其进行修改:

index[1] = 'd'  # TypeError

不可变可以使Index对象在多个数据结构之间安全共享:
【python】pandas库_第30张图片每个索引都有一些方法和属性,它们可用于设置逻辑并回答有关该索引所包含的数据的常见问题。
【python】pandas库_第31张图片


基本功能

reindex重新索引

顾名思义,就是对索引进行重排或者其他操作。

  1. 重排序索引Series:(某个索引值当前不存在,就引入缺失值)
    【python】pandas库_第32张图片
  2. 对于一些比较乱的整数索引需要填充补齐,指定方法中method,使用ffill可以实现前向值填充 :
    【python】pandas库_第33张图片
  3. reindex可以修改索引,默认是行索引:(DataFrame)

【python】pandas库_第34张图片修改列索引指定columns即可:
【python】pandas库_第35张图片

  1. reindex函数的各参数及说明:

【python】pandas库_第36张图片

drop丢弃指定轴上的项

丢弃某条轴上的一个或多个项很简单,只要有一个索引数组或列表即可。

由于需要执行一些数据整理和集合逻辑,所以drop方法返回的是一个在指定轴上删除了指定值的新对象:【也就是原对象并不会删除】

  1. Series
    【python】pandas库_第37张图片【python】pandas库_第38张图片指定inplace=True,它会删除原有对象的数据
    【python】pandas库_第39张图片

  2. DataFrame

【python】pandas库_第40张图片默认axis=0就是删除行:
【python】pandas库_第41张图片
通过传递axis=1axis=’columns’可以删除列的值:
【python】pandas库_第42张图片

索引、选取和过滤

  1. Series

Series索引(obj[...])的工作方式类似于NumPy数组的索引,只不过Series的索引值不只是整数。

【python】pandas库_第43张图片利用标签的切片运算与普通的Python切片运算不同,其末端是包含的:
【python】pandas库_第44张图片用切片可以对Series的相应部分进行设置:
【python】pandas库_第45张图片

  1. DataFrame

【python】pandas库_第46张图片

用一个值或序列对DataFrame进行索引其实就是获取一个或多个列:

【python】pandas库_第47张图片
首先通过切片或布尔型数组选取数据:(筛选的是行)
【python】pandas库_第48张图片向[ ]传递单一的元素或列表,就可选择列。

通过布尔型DataFrame进行索引:(这个不分行和列)
【python】pandas库_第49张图片

用loc和iloc进行选取

对于DataFrame的行的标签索引,我引入了特殊的标签运算符loc和iloc。它们可以让你用类似NumPy的标记,使用轴标签(loc)或整数索引(iloc),从DataFrame选择行和列的子集。

行索引 loc:轴标签 iloc:整数索引

  1. DataFrame实例.loc[行索引名, 列索引名]
    【python】pandas库_第50张图片

  2. DataFrame实例.iloc[行索引下标, 列索引下标]
    【python】pandas库_第51张图片
    【python】pandas库_第52张图片
    这两个索引函数也适用于一个标签或多个标签的切片:

【python】pandas库_第53张图片
对于DataFrame,补充:
【python】pandas库_第54张图片

算法运行数据对齐

把两个DataFrame相加后将会返回一个新的DataFrame,其索引和列为原来那两个DataFrame的并集:没有共用的列或行标签,结果都会是空,共用的会执行相关操作,例如相加
【python】pandas库_第55张图片
如何对这些没有共用的进行填充,不显示NaN:
【python】pandas库_第56张图片使用df1的add方法,传入df2以及一个fill_value参数,可以解决NaN的问题:

【python】pandas库_第57张图片
补充其他减法乘法除法运算:
【python】pandas库_第58张图片
加个r是逆置的意思,A.sub(B)正常时A-B加个r后是B-A,其他类似。
【python】pandas库_第59张图片

DataFrame和Series之间的运算

numpy中二维-一维的例子,这个类似:
【python】pandas库_第60张图片DataFrame-Series:
【python】pandas库_第61张图片【python】pandas库_第62张图片默认情况下,DataFrame和Series之间的算术运算会将Series的索引匹配到DataFrame的列,然后沿着行一直向下广播。
DataFrame的列索引与Series的索引 一一对应进行相关操作
如果某个索引值在DataFrame的列或Series的索引中找不到,则参与运算的两个对象就会被重新索引以形成并集:
【python】pandas库_第63张图片
默认都是与DataFrame的列索引进行匹配,如果要改成行匹配需要进行下面操作:
传入axis='index'或axis=0
【python】pandas库_第64张图片

函数应用和映射

NumPy的ufuncs(元素级数组方法)也可用于操作pandas对象:
【python】pandas库_第65张图片另一个常见的操作是,将函数应用到由各列或行所形成的一维数组上。DataFrame的apply方法即可实现此功能:
apply方法默认是在各行之间进行操作,保留列索引,指定axis=1后就在各列中进行操作,保留行索引。
【python】pandas库_第66张图片
【python】pandas库_第67张图片
传递到apply的函数不是必须返回一个标量,还可以返回由多个值组成的Series:

【python】pandas库_第68张图片元素级的Python函数也是可以用的。假如你想得到frame中各个浮点值的格式化字符串,使用map方法即可:
【python】pandas库_第69张图片

排名和排序

根据条件对数据集排序(sorting)也是一种重要的内置运算。要对行或列索引进行排序(按字典顺序),可使用sort_index方法,它将返回一个已排序的新对象:

索引排序:sort_index方法

  1. Series 索引排序

【python】pandas库_第70张图片
2. DataFrame索引排序

【python】pandas库_第71张图片【python】pandas库_第72张图片

值排序:sort_values方法

  1. Series

【python】pandas库_第73张图片
在排序时,任何缺失值默认都会被放到Series的末尾:
在这里插入图片描述

  1. DataFrame

当排序一个DataFrame时,你可能希望根据一个或多个列中的值进行排序。将一个或多个列的名字传递给sort_values的by选项即可达到该目的:
【python】pandas库_第74张图片【python】pandas库_第75张图片

排名会从1开始一直到数组中有效数据的数量。接下来介绍Series和DataFrame的rank方法。默认情况下,rank是通过“为各组分配一个平均排名”的方式破坏平级关系的:

  1. Series

【python】pandas库_第76张图片

也可以根据值在原数据中出现的顺序给出排名:
【python】pandas库_第77张图片
这里,条目0和2没有使用平均排名6.5,它们被设成了6和7,因为数据中标签0位于标签2的前面。

你也可以按降序进行排名:
【python】pandas库_第78张图片

  1. DataFrame

【python】pandas库_第79张图片
【python】pandas库_第80张图片


你可能感兴趣的:(python,pandas,开发语言)