python将相同索引的数据合并 python 多重索引_Python


Pandas 是一种基于 NumPy 开源的数据分析和处理工具包,提供了高性能简单易用的数据结构和数据分析函数。Pandas提供了方便的类表格类SQL的操作,同时提供了强大的缺失值处理方法,通过Pandas可以方便的进行数据导入选取清洗处理合并统计分析等操作。

Python标准库中默认不包含 Pandas,需要自己下载安装:

  • 命令行安装 pip install pandas
  • 借助于第三方包管理软件,例如Anaconda


python将相同索引的数据合并 python 多重索引_显式_02


Series对象的创建

Pandas 中的 Series 对象可以理解为带有标签数据的一维数组,标签在Pandas中有对应的数据类型“Index”,Series类似于一维数组与字典的结合

创建Series时,可通过index参数指定索引,未指定索引时,采用默认索引,从0开始,不断递增;创建Series的主要方式如下:

  • 通过列表、元组创建索引大小必须和列表大小一致
  • 通过numpy的ndarray创建:必须是一维数组,且数组大小和索引大小要一致
  • 通过字典创建:默认索引为字典的关键字,指定索引时,会以索引为键获取值,没有值时,默认为NaN
  • 通过标量创建 :重复填充标量到每个索引上


python将相同索引的数据合并 python 多重索引_显式_03


values 属性获取具体值,类型为一维ndarray;可通过index 属性获取相应索引,类型为Index

Index对象介绍

Pandas 的 Index 对象可以看作是一个不可变数组Index 对象中可以包含重复值。可直接通过Pandas中的Index类创建Index对象,也可以通过Series或DataFrame中的 index属性 获取对应的Index对象。Index对象可以在多个数据间共享。例如:


python将相同索引的数据合并 python 多重索引_显式_04


Index对象的很多操作都与 numpy 中的数组类似,例如支持索引和切片操作支持Numpy中的一些常见函数,拥有sizeshapendim 等属性。不同的是Index 对象的值是不可变的。Index 对象的不可变特征使得多个数据之间进行索引共享时更加安全, 可避免因修改索引时而导致的副作用。

Index对象也支持集合操作,例如如并集 交集差集等,这些操作也可以通过调用对象方法来实现。不同的是操作结果中可能会存在重复的元素

Series中数据的访问

Series 对象与 numpy 中的一维数组 字典 dict 在很多方面都类似。Series 对象中数据访问可与它们进行类比学习

(1)将Series看作字典

  • 字典中的键不允许重复,但Series中的索引允许有重复值
  • 以索引为键,可访问对应的值,如果有多个,则结果为Series类型
  • 可调用字典的一些常见方法,如keys()、items()等,可判断是否包含指定索引;
  • 用字典类似语法更新数据,对已有的索引进行赋值,会修改索引对应的值,对一个不存在的索引进行赋值,会添加一个索引


python将相同索引的数据合并 python 多重索引_Python_05


系统一般会为Series对象默认分配一个从0开始不断增大的索引,称为隐式索引;用户通过index指定的索引称为显式索引。如果显式索引为整数,容易冲突,通过键访问采用的是显式索引,通过切片访问采用的是隐式索引尽量不要使用整数作为显式索引。其他情况下,两种方式可以共存。

(2)将Series看作一维数组

  • 可以通过索引、切片、布尔表达式访问数据;
  • 通过切片访问时,显式索引结果包含最后一个索引,隐式索引结果不包含最后一个索引


python将相同索引的数据合并 python 多重索引_一维数组_06


(3)索引器:loc、iloc

  • loc: 显式索引访问,即根据用户指定的索引访问
  • iloc: 隐式索引访问,即根据位置序号访问


python将相同索引的数据合并 python 多重索引_pandas 设置多重索引_07


Series中常用方法

  • sort_index():对Series按照索引排序生成一个新的Series对象
  • sort_values():对Series按照值排序,生成一个新的Series对象
  • rank()对值进行排名,从1开始,对于相同的值默认采用平均排名
  • reindex()重新设置索引生成一个新的Series对象。新的索引长度和原始索引长度可以不相同,如果新的索引不在原始数据中,则对应的值为NaN,如果在原始数据中,则值保持不变,可通过method参数指定值填充的方案(要求原始索引是递增的),还可通过fill_value参数指定填充值
  • Series对象也可执行numpy中的一些运算,此时只对值进行操作,索引和值之间的对应关系不变;
  • Series对象之间执行运算时,会自动进行对齐相同索引之间执行相应运算,不同索引对应的值为NaN


python将相同索引的数据合并 python 多重索引_Python_08