pandas 是python的数据分析库,提供快速、灵活和富有表现力的数据结构,用于数据挖掘和数据分析,同时也提供数据清洗功能,与numpy、matplotlib并称,成为数据分析必学的三个库。Pandas的主要功能如下。
此外,其更广泛的目标是成为任何语言中可用的最强大,最灵活的开源数据分析工具。其中最常用的数据结构是DataFrame,本文将详细介绍DataFrame的用法。
Dataframe简介Dataframe是pandas中的数据结构,也是带标签的、大小可变的,二维异构表格。
它类似于电子表格,可以在列中存储不同类型的数据(包括字符,整数,浮点值,分类数据等),Dataframe中的数据以一个或多个二维块存放,不是列表、字典或一维数组结构。
一、创建
1、通过字典创建由数组/list组成的字典创建Dataframe,columns为字典key,index为默认数字标签,字典的值的长度必须保持一致!
2、通过二维数组直接创建通过二维数组直接创建Dataframe,得到一样形状的结果数据,如果不指定index和columns,两者均返回默认数字格式
index和colunms指定长度与原数组保持一致
3、通过字典组成的列表创建由字典组成的列表创建Dataframe,可以允许长度不一致,columns为字典的key,index不做指定则为默认数组标签
colunms和index参数分别重新指定相应列及行标签
二、DataFrame索引
1、df[] - 选择列df[]默认选择列,[]中写列名,选择单列为Series,print结果为Series格式,多选列为Dataframe,print结果为Dataframe格式
一般用于选择列,也可以选择行
注意:反向截取是-1结束,不是0,末端不包含
2、df.loc[] - 按index选择行
3、 df.iloc[] - 按照整数位置(从轴的0到length-1)选择行类似list的索引,其顺序就是dataframe的整数位置,从0开始计
4、切片索引
5、布尔索引
多行做判断 , 索引结果保留所有数据:True返回原数据,False返回值为NaN6、多重索引
三、DataFrame基本技巧
1、数据查看、转置
2、添加与修改要在dataframe最后新增列,直接在后面加一个[],在具体位置新增列用df.insert(index, obj)方法;新增行直接用loc。
3、删除del语句 - 删除列
drop()删除行,inplace=False → 删除后生成新的数据,不改变原数据
drop()删除列,需要加上axis = 1,inplace=False → 删除后生成新的数据,不改变原数据
4、DataFrame对象之间的数据自动按照列和索引(行标签)对齐
5、排序排序包括按值排序和按索引排序,按值排序 .sort_values,ascending参数:设置升序降序,默认升序
按索引排序 .sort_index
四、数据处理1、数值计算
Dataframe可以用来进行常用的数学的计算,例如:
1、数据清洗
Dataframe的数据清洗包含重复值、缺失值、异常值等等的清洗
值计数:df.value_counts()
成员资格:df.isin()
替换:df.replace()
判断重复值: df.duplicated()
删除重复值:df.drop_duplicates()
subset对应的值是列名,表示只考虑这两列,将这两列对应值相同的行进行去重。默认值为subset=None表示考虑所有列。keep='first'表示保留第一次出现的重复行,是默认值。keep另外两个取值为"last"和False,分别表示保留最后一次出现的重复行和去除所有重复行。
缺失值清洗最简单的方法就是删除或不管,插补的方法有单一值填充、拉格朗日插值法、多重插补法以及各种机器学习插补法等等,缺失值和异常值清洗方法具体可见python数据预处理之异常值、缺失值处理方法
3、数据合并数据合并包括四种方法,merge、join、concat和append
l pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None,
left_index=False, right_index=False, sort=True,
suffixes=('_x', '_y'), copy=True, indicator=False)
类似于sql中的join,仅支持横向拼接,其中on关键字为拼接参考键,how为拼接方式,有inner,left,right,outer4种链接方式。
l df1.join(df2) 直接通过索引链接
l pd.concat(objs, axis=0, join='outer', join_axes=None, ignore_index=False,
keys=None, levels=None, names=None, verify_integrity=False,
copy=True)
可以进行横向和纵向连接,默认axis=0,行+行,但要求非拼接轴标签唯一,例如axis=0时,要求每个dataframe内部的列名是唯一的,只有相同列名才有拼接的意义。
l append,类似于列表的append方法,一般用来增加行
4、数据转换数据转换一般用map和apply,map主要用于Series的转换,apply是series和dataframe都可以。
Dataframe运用apply可以将各行和各列的函数运用到一维数组上,默认情况下会以列为单位,分别对列应用函数。如果想要将函数应用到每一个元素,需要用到applymap
五、数据分析1、统计基础
Dataframe也拥有基本的统计功能,具体如下:
2、数据分组Dataframe在行(axis=0)或列(axis=1)上进行分组,将一个函数应用到各个分组并产生一个新值,然后函数执行结果被合并到最终的结果对象中。
l groupby 类似sql的group by功能,直接分组得到一个groupby对象,是一个中间数据,没有进行计算,所以一定要加上集合函数,复杂的聚合函数可借用agg,功能更强大。
df.groupby(by=None, axis=0, level=None, as_index=True, sort=True, group_keys=True, squeeze=False, **kwargs)
常用的聚合函数如下:
l 数据透视表pivot_table
类似于excel中的数据透视功能,可以通过一个或多个键分组聚合DataFrame中的数据,通过aggfunc参数决定聚合类型,是groupby的高级功能。
l 交叉表crosstab
默认情况下,crosstab是用来计算因子的频率表,透视表是一种进行分组统计的函数,而交叉表是特殊的透视表,当只统计分组频率时更方便。
数据透视表和交叉表的具体用法,可见pd.pivot_table数据透视表与pd.crosstab交叉表
Dataframe的常见用法就是这些,当然还可以通过plot来调用matplotlib进行数据可视化,不过主要还是要依赖matplotlib。