pandas教程, 1. Introduction to Panda:
Pandas是python数据分析的组合缩写,是python中基于numpy和matplotlib的第三方数据分析库,与后两者共同构成了python数据分析的基础工具包。
享三剑客之名。
2.熊猫数据结构:
熊猫的核心数据结构有两种,一维数列和二维dataframe,可以看作是分别在numpy一维数组和二维数组的基础上增加了相应的标签信息。正因为如此,
Series和dataframe可以从两个角度来理解:
Series和dataframe分别是一维和二维数组。因为是数组,所以numpy中数组的用法基本上可以直接应用到这两种数据结构上,包括数据创建、切片访问、通用函数、广播机制等等。
Series是带标签的一维数组,所以也可以看作是类字典结构:标签是键,值是值;Dataframe可以看作是一个嵌套的字典结构,其中列名是键,每列的系列是值。
所以从这个角度来说,创建pandas数据的一个灵活的方式就是通过字典或者嵌套字典,同时自然衍生出适合series和dataframe的类字典接口,也就是通过loc索引访问。
3、数据读写:
Pandas支持读写大多数主流文件格式的数据。常见的格式和接口有:
文本文件主要有csv和txt,对应的接口有read_csv()和to_csv(),分别用来读写数据。
支持Excel文件,包括xls和xlsx格式。底层调用xlwt和xlrd操作Excel文件,对应的接口是read_excel()和to_excel()。
SQL文件,支持大多数主流的关系数据库,比如MySQL,需要相应的数据库模块的支持,相应的接口有read_sql()和to_sql()。
此外,熊猫还支持html、json等文件格式的读写。
4.数据访问:
Series和dataframe具有numpy数组和字典的结构特征,所以数据访问是从这两个方面入手的。同时,还支持bool索引进行数据访问和过滤。
[],这是一种非常方便的访问方式,但有必要区分series和dataframe:
Series:可以使用标签或数字索引访问单个元素,也可以使用相应的切片访问多个值。因为只有一维信息,所以没有悬念。
Dataframe:不能访问单个元素,只能返回一列、多列或多行:单值或多值(多个列名的列表)访问时可以按列查询,单值访问时列名没有歧义时可以用属性符号直接访问。以切片形式访问时,按行查询,
还区分了数字切片和标签切片:输入数字索引切片时,类似于普通列表切片;当输入标签切片时,执行范围查询(即切片的第一个和最后一个值不需要存在于标签列中),并且包括两端标签的结果。如果没有匹配的行,则返回空白。
但是,标签切片类型需要与索引类型一致。例如,当标签列类型(可通过df.index.dtype查看)为时间类型时,如果将不能隐式转换为时间的字符串用作索引片,则会引发错误。
5、数据处理:
熊猫最强大的功能当然是数据处理和分析,可以独立完成数据分析前的大部分数据预处理需求。简单概括起来,可以分为以下几个方面:
数据清理
数据处理中的清理主要包括空值、重复值和异常值的处理:
空值
空字符串、空列表等。不是空值;同样,notna和notnull用于确定它是否为非空。
填充空值。按照一定的策略填充空值,如常量填充、向前/向后填充等。也可以通过inplace参数确定是否在本地更改它。
删除空值,dropna,删除整行或整列的空值,可以通过axis设置,包括inplace参数。
重复值
检测重复值,duplicate,检测每行是否重复,返回一行索引的bool结果。可以通过keep参数设置首行/末行/无预留。例如,keep=first意味着当有多个重复行时,
第一行被认为是合法的,可以保留。
删除重复值,drop_duplicates,逐行检测并删除重复记录,或者通过keep参数设置保留项。默认情况下,该方法按行检测,因此如果需要按列删除,可以在执行该方法之前对其进行转置。
离群值,判断离群值的标准取决于具体的分析数据,这里只提供两种备选的处理离群值的方法。
Delete、drop和accept参数用于删除特定轴上的一条或多条记录。可以通过轴参数设置是按行删除还是按列删除。
Replace,replace,非常强大的功能,对序列或数据帧中的每个元素进行条件替换操作,还开启了正则表达式功能。
数值计算
因为pandas是在numpy的基础上实现的,所以numpy的常见数值计算操作也适用于pandas:
通用函数ufunc可以像操作标量一样对所有串行或数据帧的元素执行相同的操作,这与numpy的特性是一致的。比如上面提到的replace函数,本质上可以看作是一个通用函数。
按如下方式逐个元素对数据表求平方。
广播机制,即当尺寸或形状不匹配时,会根据一定条件广播后计算。因为熊猫是带标签的数组,所以在播放过程中会根据标签匹配自动播放,而不是像numpy那样纯顺序播放。举个例子,
在下面的示例中,dataframe和series相乘。虽然两者的维度和大小不同,标签顺序不一致,但是通过标签匹配仍然可以得到预期的结果。
字符串矢量化,即对数据类型为字符串格式的列执行矢量化的字符串操作。本质上就是调用series.str属性的series接口来完成相应的字符串操作。特别强大的是,除了常用的字符串操作方法,
str属性接口还集成了正则表达式的大部分功能,这使得pandas在处理字符串列时高效而强大。例如,下面的代码可以用来计算每个句子的字数。
与字符串一样,时间类型向量化操作是在pandas中得到优先处理的另一种数据类型。就像字符串列可以用str属性调用字符串接口一样,时间类型列可以用dt属性调用相应的接口,在处理时间类型的时候会非常有效。
数据变换
Pandas还提供了更强大的数据转换方法。
map,适用于series对象,功能与python中的普通map函数类似,即对给定序列中的每个值执行相同的映射操作,
不同的是series中的map接口的映射方式既可以是一个函数,也可以是一个字典
apply,既适用于series对象也适用于dataframe对象,
但对二者处理的粒度是不一样的:apply应用于series时是逐元素执行函数操作;apply应用于dataframe时是逐行或者逐列执行函数操作(通过axis参数设置对行还是对列,默认是行),
仅接收函数作为参数
applymap,仅适用于dataframe对象,且是对dataframe中的每个元素执行函数操作,从这个角度讲,与replace类似,applymap可看作是dataframe对象的通函数。
合并与拼接
pandas中又一个重量级数据处理功能是对多个dataframe进行合并与拼接,对应SQL中两个非常重要的操作:union和join。pandas完成这两个功能主要依赖以下函数:
concat,与numpy中的concatenate类似,但功能更为强大,可通过一个axis参数设置是横向或者拼接,要求非拼接轴向标签唯一(例如沿着行进行拼接时,要求每个df内部列名是唯一的,
但两个df间可以重复,毕竟有相同列才有拼接的实际意义)
merge,完全类似于SQL中的join语法,仅支持横向拼接,通过设置连接字段,实现对同一记录的不同列信息连接,支持inner、left、right和outer4种连接方式,
但只能实现SQL中的等值连接
join,语法和功能与merge一致,不同的是merge既可以用pandas接口调用,也可以用dataframe对象接口调用,而join则只适用于dataframe对象接口
append,concat执行axis=0时的一个简化接口,类似列表的append函数一样
实际上,concat通过设置axis=1也可实现与merge类似的效果,二者的区别在于:merge允许连接字段重复,类似一对多或者多对一连接,此时将产生笛卡尔积结果;而concat则不允许重复,
仅能一对一拼接。
pandas教程,以上就是本文为您收集整理的pandas教程最新内容,希望能帮到您!更多相关内容欢迎关注。