Pandas介绍

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Pandas介绍相关的知识,希望对你有一定的参考价值。

参考技术A

首先,需要先安装numpy和pandas环境,参考: https://pandas.pydata.org/
。以下语句检查并确认安装成功。

Pandas 有三种基本数据结构:Series、DataFrame 和 Index。

Pandas 的 Series 对象是一个带索引数据构成的一维数组。Series 对象将一组数据和一组索引绑定在一起,我们可以通过 values 属性和 index 属性获取数据。values 属性返回的结果与 NumPy 数组类似;index 属性返回的结果是一个类型为 pd.Index 的类数组对象。
可以像访问Numpy那样来访问Series(序号也是从0开始计数的)。

Pandas 的 Series 对象比Numpy更加灵活、通用。
两者的主要区别是:NumPy 数组通过 隐式定义 的整数索引获取数值,而 Pandas 的 Series 对象用一种 显式定义 的索引与数值关联。也就是说,Numpy的索引是系统自分配的无法更改,但是Series对象是可以手工指定的。

Series是 特殊的字典 ,Series 对象其实是一种将类型键映射到一组类型值的数据结构,Pandas Series 的类型信息使得它在某些操作上比 Python 的字典更高效。用字典创建 Series 对象时,其索引默认 按照顺序排列

DataFrame类似于RDBMS中的Table。DataFrame就可以看作是一种既有灵活的行索引,又有灵活列名的二维数组。
DataFrame有2个常用属性,分别是 index 属性 columns 属性 。前者可以获取索引标签(行标签);后者是是存放列标签的Index 对象。DataFrame 是特殊的字典,一列映射一个Series 的数据。
DataFrame可以通过以下几种方式来创建:(1)通过单个 Series 对象创建。(2)通过字典列表创建。(3)通过 Series 对象字典创建。(4)通过NumPy 二维数组创建。(5)通过 NumPy 结构化数组创建。

可以将Index视为一个不可变数组或有序集合。当作为不可变数组时,一般数组的访问方式(例如切片等)对Index适用,与数组的最大区别是 Index对象不可更改 。当作为集合时,Index也可以做交集、并集等常规操作。

Series的访问既可以作为字典,也可以作为一维数组。数据访问的方法,可以参考Numpy的访问方式,这里不赘述。

如果Series的显式索引是整数,那么在访问时,很容易混淆。例如下边的例子:

从上边的例子总结得出,python的默认规则是:在单个访问时,使用的显式索引,而在切片时,使用的是隐式索引,很容易混淆!python提供了loc、iloc和ix三种索引器。
loc表示:表示取值和切片都是显式的。iloc 属性,表示取值和切片都是隐式索引。ix是loc和iloc的混合形式,应用于dataFrame(使用例子在3.3节)。

dataframe可以通过对列名进行字典形式(dictionary-style)的取值获取数据。可以把 DataFrame 看成是一个增强版的二维数组,用 values 属性按行查看数组数据。ix 索引器对于整数索引的处理和之前在 Series 对象中介绍的一样,都容易让人混淆。

对于一元运算(像函数与三角函数),这些通用函数将在输出结果中保留索引和列标签(很简单,所有元素做相应运算并返回);而对于二元运算(如加法和乘法),Pandas 在传递通用函数时会自动 对齐索引 进行计算。
当在两个 Series 或 DataFrame 对象上进行二元计算时,Pandas 会在计算过程中对齐两个对象的索引。如果想给缺失数值指定一个默认值,需要使用add来替代+,并指定fill_value:

两个对象的行列索引可以是不同顺序的,结果的索引会自动按顺序排列。

DataFrame 和 Series 的运算规则,与NumPy 中二维数组与一维数组的运算规则是一样的。需要使用广播原则,那么默认地,会按行计算。如果想要按列运算,需要使用参数axis = 0 。

注意:DataFrame访问行可以使用loc,但是访问列,只能是df[\'col\']这种形式了。

缺失值有三种形式:null、NaN 或 NA。
处理缺失值,一般有两种方法:一种方法是通过一个覆盖全局的掩码表示缺失值,另一种方法是用一个标签值(sentinel value)表示缺失值。
掩码是利用一个跟原来一样大小的矩阵,用0或者1表示某个元素缺失。标签值是利用一个特殊字符例如NaN表示缺失。
Pandas 选择用标签方法表示缺失值,包括两种 Python 原有的缺失值: 浮点数据类型(包括整型) 的 NaN 值,以及 Python的 None 对象

使用None时,表示一个空的python对象,所以numpy的dtype=object,因为是对象所以在进行大批量计算时,效率会比标量低。使用np.nan时表示标量,效率会高很多。

对于缺失值,pandas提供了几个有用的API方法,分别是:isnull(),notnull(),dropna(),fillna()。其中,对于dataframe,dropna()方法默认会将包含NaN的整行都drop掉,如果想按照整列drop,增加axis=1参数。

pandas的MultiIndex提供了多级索引的功能,用元组表示是多级索引的基础。

下面例子,使用元组索引生成Series。筛选2019的索引,非常繁琐。

Pandas 的 MultiIndex 类型提供多种实现方法,下边例子使用元组表示实现。
unstack() 方法可以快速将一个多级索引的 Series 转化为普通索引的DataFrame。stack() 方法实现相反的效果。

总结一下,创建多级索引的方法包括:
(1)通过一个有不同等级的若干简单数组组成的列表来构建 MultiIndex:pd.MultiIndex.from_arrays。
(2) 多个索引值的元组构成的列表创建 MultiIndex:pd.MultiIndex.from_tuples。
(3)用两个索引的笛卡尔积创建MultiIndex:pd.MultiIndex.from_product。
(4)直接提供 levels和labels创建 MultiIndex(lablels是指每个级别的整数指定每个位置):

上边的例子中,不管是Series还是DataFrame都是按照行来进行多级索引,其实,也可以按列索引,而且非常简单,下边是一个例子(几个学生在2018和2019两次考试的不同科目成绩):

需要对多级索引做显示切片操作时,可以使用pd.IndexSlice对象来切,不同级别的维度,拿逗号分割,例如下边例子中的df_sd_003.loc[idx_sd[2018,:],idx_sd[\'Alice\',:]]。其他切片和取值操作与Numpy很类似。

如果 MultiIndex 不是有序的索引,那么大多数切片操作都会失败。
如果Series或者DataFrame的索引是未排序的,可以简单地通过sort_index方法来快速排序。
层级数据维度转换的另一种方法是行列标签转换,可以通过reset_index 方法实现

通过pd.concat()实现pandas对象合并,pd.cancat的所有参数(下面列举的是这些参数的默认值):

pd.concat() 可以简单地合并一维的 Series 或 DataFrame 对象,与
np.concatenate() 合并数组一样。
DataFrame 的合并默认都是逐行进行的(axis=0);pd.concat在合并时会保留索引,即使索引是重复的!如果设置 verify_integrity=True,那么生成重复索引时,会触发异常!有时索引无关紧要,那么合并时就可以忽略它们,可以通过设置 ignore_index 参数来实现。默认的合并方式是对所有输入列进行并集合并(join=\'outer\'),当然也可以用 join=\'inner\' 实现对输入列的交集合并。下面是一个实现合并的例子:

Pandas 的基本特性之一就是高性能的内存式数据连接(join)与合并(merge)操作。

pd.merge() 实现的功能基于关系代数(relational algebra)的一部分。 pd.merge() 函数实现了三种数据连接的类型:一对一、多对一和多对多。pd.merge()会自动识别2个dataframe共有的列,并以这个列进行关联。

上边的例子中,关联的两个dataframe具有相同名称的列,pandas会直接按同名列合并,由于两个输入要合并的列通常都不是同名的,因此 pd.merge() 提供了一些参数处理这个问题。
1.最简单的方法就是直接将参数 on 设置为一个列名字符串或者一个包含多列名称的列表,这个参数只能在两个 DataFrame 有共同列名的时候才可以使用。

pandas介绍及环境部署

pandas介绍

  Python Data Analysis Library 或 pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。你很快就会发现,它是使Python成为强大而高效的数据分析环境的重要因素之一。pandas是python里用于分析结构化数据的工具集,具有数据迁徙功能,可以处理海量数据

  pandas依赖于两个科学计算库,numpy与matplotlib

  numpy:提供高性能矩阵运算和一些数据模型

  matplotlib:提供数据可视化

数据分析环境

Ipython介绍

IPython 是一个交互式的 Python 解释器,而且它更加高效。除了代码补全,代码高亮外,还有很多magic(%)命令。
常用命令:%run test.py(执行py文件)
    %timeit a.dot(a)计算两个矩阵相乘,点乘,内积
    %quickref查看ipython文档
显示内联图片,在命令行输入ipython notebook,ipython会自动启动一个WEB服务,并打开常用浏览器,访问ipython网页页面,运行命令:shift+enter,自动运行并且插入新命令行
它和大多传统工作模式(编辑 -> 编译 -> 运行)不同的是, 它采用的工作模式是:执行 -> 探索 ,而大部分和数据分析相关的代码都含有探索式操作(比如试误法和迭代法),所以 IPython 能大大提高编码效率。 
IPython 发展到现在,它不仅仅只是一个加强版的 Python shell 了, 它集成了 GUI 控制台,这可以让你直接进行绘图操作;它还有一个基于 Web 的交互式笔记本和一个轻量级的快速并行的计算引擎。

Ipython开发环境搭建

  需要安装的库有jupyter(Ipython工具)、numpy、matplotlib、(windows需要额外安装pyreadline,在ipython环境里面有命令行自动完成功能,mac及linux下无需安装)

pip3 install jupyter
pip3 install numpy
pip3 install matplotlib
pip3 install pyreadline

  根据以上命令挨个安装即可,安装速度慢可以加上pip国内豆瓣源

Ipython环境测试

以上库都安装完成之后,打开终端,输入ipython检测是否环境搭建完成

出现如上图所示,表示ipython环境搭建完成

 

 

 

 

以上是关于Pandas介绍的主要内容,如果未能解决你的问题,请参考以下文章

008 pandas介绍

python之pandas简单介绍及使用

pandas介绍及环境部署

pandas.Series.dt日期处理各种函数介绍

python之pandas简单介绍及使用

pandas介绍