pandas(一)

这篇博客介绍了Python数据分析库pandas的基础知识,包括series和dataframe两种核心数据结构的创建与操作,如索引、切片、运算。此外,还讨论了pandas的基本功能,如数据索引、统计分析、分组、数据清洗,以及读写文本格式数据的方法。

介绍

在Python中,pandas是基于numpy数组构建的.使数据预处理,清洗,分析工作变得更快更简单.pandas是专门为处理表格和混杂数据设计的,而numpy更适合处理统一的数值数组数据.
pandas有两个主要的数据结构:series和dataframe

series

series是一种类似于一维数组的对象,它由一组数据(各种numpy数据类型)以及一组与之相关的数据标签(即索引)组成,即index和values两部分,可以通过索引的方式选取series中的单个或一组值.

series的创建

pandas.series(list, index=[]),第二个数组是series中数据的索引,可以省略.

  • 第一个参数可以是列表或者ndarray.
  • 第一个参数可以是字典,字典的键将作为series的索引
  • 第一个参数可以使dataframe中的某一行或一列

series类型的操作

series类型索引、切片、运算的操作类似于ndarray,同样的类似Python字典类型的操作,包括保留字操作,使用.get()方法.
series和ndarray之间的主要区别在于series之间的操作会根据索引自动对齐数据.

dataframe

dataframe是一个表格型的数据类型,每列值类型可以不同,时最常用的pandas对象.
dataframe既有行索引也有列索引,它可以被看作由series组成的字典(共用一个索引).
dataframe中的数据是一个以一个或多个二维块存放的(而不是列表,字典,或别的一维数据结构)

dataframe的创建

pandas.dataframe(data, columns=[], index=[])
columns和index为指定的列,行索引,并按照顺序排列
创建dataframe最常用的是直接传入一个有等长列表或numpy数组组成的字典,会自动加上行索引,字典的键会被当做列索引.
如果创建时指定了columns和index索引,则按照索引顺序排列,并且如果传入的列在数据中找不到,就会在结果中产生缺失值(NaN).
另一种常见的创建dataframe方式是使用嵌套字典,如果嵌套字典传给dataframe,pandas就会被解释为外层字典的键作为列,内层字典键则作为行索引.

可以输入给dataframe构造器的数据

类型说明
二维ndarray数据矩阵,还可以传入行标和列标
由数组,列表或元组组成的字典每个序列会被构造成dataframe的一列,所有序列的长度必须相同.
numpy的结构化/记录数组类似于"由数组组成的字典".
由series组成的字典每个series会成为一列.如果没有显式指定索引,则各series的索引会被合并成结果的行索引.
由字典组成的字典各内层字典会称为一列.键会被合并成结果的行索引,跟"由series组成的字典"的情况一样.
字典或series的列表各项将会成为dataframe的一行.字典键或series索引的并集将会成为dataframe的列标.
由列表或元组组成的列表类似于"二维ndarray".
另一个dataframe该dataframe的索引将会被沿用.除非显式制定了其他索引.
numpy的MaskedArray类似于"二维ndarray"的情况,只是掩码值在结果dataframe会变成NA/缺失值.

dataframe对象操作

  1. dataframe.values:将dataframe转换为ndarray二维数组,是dataframe对象的属性;
  2. 通过类似字典标记的方式或属性的方式,可以将dataframe的列获取为一个series;
  3. 列可以通过赋值的方式进行修改;
  4. 将列表或数组赋值给某个列时,其长度必须跟dataframe的长度相匹配.如果赋值的是一个series,就会精确匹配dataframe的索引,所有空位都将被填上缺失值;
  5. 为不存在的列赋值会创建出一个新列.
  6. 关键字del用于删除列

pandas的基本功能

数据索引

series和dataframe的索引是index类型,index对象是不可修改,可通过索引值或索引标签获取目标数据,也可通过索引使序列或数据框的计算,操作实现自动化对齐.索引类型index的常用方法:

  • .append(idx):连接另一个index对象,产生新的index对象
  • .diff(idx):计算差集,产生新的index对象
  • .intersection(idx):计算交集
  • .union(idx):计算并集
  • .delete(loc):删除loc位置处的元素
  • .insert(loc,e):在loc位置增加一个元素

重新索引

能够改变,重排series和dataframe索引,会创建一个新对象,如果某个索引值当前不存在,就引入缺失值.
df.reindex(index, columns, fill_value, method, limit, copy)
参数说明:

  • index/columns:为新的行列自定义索引;
  • fill_value为用于填充缺失位置的值;
  • method为填充方法,ffill当前值向前填充,bfill向后填充;
  • limit为最大填充量
  • copy默认True,生成新的对象,False时,新旧相等不复制.

删除指定索引

dataframe.drop()能够删除series和dataframe指定的行或列索引.默认返回一个新对象.删除一行或一列时,用单引号指定索引,删除多行时,用列表指定索引.如果删除的是列索引,需要添加axis=1或axis="columns"作为参数.增加inplace=True作为参数,可以就地修改对象,不会返回新的对象.

索引,选取和过滤

dataframe.loc(行标签, 列标签)通过标签查询指定的数据.第一个值作为行标签,第二个值作为列标签.当第二个参数为空时,查询的是单个或多个行的所有列.如果查询多个行,列的话,则两个参数用列表表示.
dataframe.iloc(行位置,列位置)通过默认生成的数字索引查询指定的数据.
在pandas中,有多个方法可以选取和重新组合数据.对于dataframe,如下表总结:

类型说明
df[val]从dataframe选取单列或一组列;在特殊情况下比较便利:布尔型数组(过滤行),切片(行切片),或布尔型dataframe(根据条件设置值).
df.loc[val]通过标签,选取dataframe的单个行或一组行
df.loc[:, val]通过标签,选取单列或列子集
df.loc[val1, val2]通过标签,同时选取行和列
df.iloc[where]通过整数索引,从dataframe选取单个行或行子集
df.iloc[:,where]通过整数索引,从dataframe选取单个列或列子集
df.iloc[where_i, where_j]通过整数索引,同时选取行和列
df.at[label_i, label_j]通过行和列标签,选取单一的标量
df.iat[i,j]通过行和列的位置(整数),选取单一的标量
reindex通过标签选取行或列
get_value,set_value通过行和列标签选取单一值

算数运算

算数运算根据行列索引,对齐后运算,运算默认产生浮点数,对齐时缺项自动填充NaN.除了用±*/外,还可以用series和dataframe的算数方法,这些方法传入fill_value参数时,可以填充缺省值.比如df1.add(df2, fill_value=1):

方法说明
add, radd加法
sub, rsub减法
div, rdiv除法
floordiv, rfloordiv底除
mul, rmul乘法
pow, rpow

比较运算

只能比较相同索引的元素,比进行补齐.采用<,>,<=,>=,==,!=等符号进行的比较运算,产生布尔值.

排序

在排序时,任何缺失值默认都会被放到末尾
dataframe.sort_index(axis=0, ascending=True)根据指定轴索引的值进行排序,默认axis=0
ascending=True,升序排序,False降序排序.默认升序
series.sort_values(axis=0, ascending=True)只能根据-轴进行排序
dataframe.sort_values(by,axis=0,ascending=True)参数by为axis轴上的某个索引或索引列表

pandas数据分析

统计分析,相关分析

适用于series和dataframe的基本统计分析函数,传入axis='columns’或axis=1将会按行进行运算.
dataframe.describe()针对各列的多个统计汇总,用统计学指标快速描述数据的概要
dataframe.sum()计算各列数据的和
dataframe.count()非NaN值的数量
dataframe.mean()/median()计算数据的算数平均值,算数中位数
dataframe.var()/std()计算数据的方差,标准差
dataframe.corr()/cov()计算相关系数矩阵,协方差矩阵,是通过参数对计算出来的.series的corr方法用于计算两个series中重叠的,非NaN的,按索引对齐的值的相关系数.dataframe的corr和cov方法将以dataframe的形式分别返回完整的相关系数或协方差矩阵.
dataframe.corrwith()计算某列或行跟另一个series或dataframe之间的相关系数.传入一个series将会返回一个相关系数指series,传入一个dataframe则会计算按列名配对的相关系数.
dataframe.min()/max()计算最小值,最大值
dataframe.diff()计算一阶差分,对时间序列有效
dataframe.mode()计算众数,返回频数最高的那(几)个
dataframe.mean()计算均值
dataframe.quantile()计算分为数(0到1)
dataframe.isin()用于判断矢量化集合的成员资格,可用于过滤series中或dataframe列中数据的子集.适用于series的基本统计分析函数,dataframe[列名]返回的是一个series类型.
dataframe.unique()返回一个series中的唯一值组成的数组
dataframe.value_counts()计算一个series中各值出现的频率
dataframe.argmin()/argmax()计算数据最小值、最大值的索引(自动索引)
dataframe.idxmin()/idxmax()计算数据最小值、最大值的索引(自定义索引)

分组

dataframe.groupby()分组函数,使用方法参考:
https://blog.csdn.net/cymy001/article/details/78300900
pandas.count()根据数据分析对象的特征,按照一定的数值指标,把数据分析对象划分为不同的区间部分来进行研究,以揭示其内在的联系和规律性.类似给成绩设定优良中差,比如:0-59为差,60-70为中,71-80为优秀等等.使用方法参考:
https://blog.csdn.net/weixin_39541558/article/details/80578529
https://blog.csdn.net/missyougoon/article/details/83986511

pandas读写文本格式的数据

pandas提供了一些用于将表格型数据读取为dataframe对象的函数.下表对它们进行了总结,其中read_cav(),read_table(),to_csv()是用的最多的.

函数说明
read_csv()从文件,URL,文件型对象中加载带分隔符的数据.默认分隔符为逗号.
read_table()从文件,URL,文件型对象中加载带分隔符的数据.默认分隔符为制表符’\t’
read_fwf()读取定宽列格式数据(也就是说,没有分隔符)
read_clipboard()读取剪贴板中的数据,可以看做read_table的剪贴板版,在将网页转换为表格时很有用.
read_excel()从excel xls或xlsx file 读取表格数据
read_hdf()读取pandas写的HDF5文件
read_html()读取HTML文档中的所有表格
read_json()读取JSON字符串中的数据
read_msgpack()读取二进制格式编码的pandas数据
read_pickle()读取Python pickle格式中存储的任意对象
read_sas()读取存储于SAS系统自定义存储格式的SAS数据集
read_sql()使用SQL Alchemy读取SQL查询结果为pandas的dataframe
read_stata()读取stata文件格式的数据集
read_feather()读取feather二进制文件格式

工作中实际碰到的数据可能十分混乱,一些数据加载函数的参数非常多.例如read_csv()有超过50个参数.参考:https://seancheney.gitbook.io/python-for-data-analysis-2nd/di-06-zhang-shu-ju-jia-zai-cun-chu-yu-wen-jian-ge-shi

用pandas来进行数据清洗和准备

在数据分析和建模的过程中,相当多的时间要用在数据准备上:加载,清理,转换以及重塑.

处理缺失数据

在许多数据分析工作中,缺失数据是经常发生的.对于数值数据,pandas使用浮点值,NaN(np.nan)表示缺失数据,也可将缺失值表示为NA(Python内置的None值).
dataframe.info()查看数据的信息,包括每个字段的名称,非空数量,字段的数据类型.
dataframe.isnull()返回一个同样长度的值为布尔型的对象(series或dataframe),表示哪些值是缺失的,.notnull()为其否定形式.
dataframe.dropna()删除缺失数据.对于series对象,dropna返回一个仅含非空数据和索引值的series.对于dataframe对象,dropna默认删除含有缺失值的行;如果想删除含有缺失值的列,徐传入axis=1作为参数.如果想删除全部为缺失值的行或者列,徐传入how='all'作为参数;如果想留下一部分缺失数据,徐传入thresh=n作为参数,表示每行至少n个非NA值.
dataframe.fillna(value, method, limit, inplace)填充缺失值.

  • value为用于填充的值(比如0,'a’等),或者是字典(比如{‘列’:1, ‘列’:8,…}为指定列的缺失数据填充值);
  • method默认为ffill,向前填充,向后填充bfill;
  • limit为向前或向后填充的最大填充量.
  • inplace默认返回新对象,传递inplace=True参数,可以实现对现有对向的就地修改.

数据转换

替换值

dataframe.replace(old, new)用新的数据替换旧的数据,如果希望一次性替换多个值,old和new可以使列表.默认会返回一个新的对象,传入inplace=True实现就地修改.

删除重复数据

dataframe.duplicated()判断各行是否是重复行(前面出现过的行),返回一个布尔型series.
dataframe.drop_duplicstes()删除重复行.返回删除后的dataframe对象.默认保留的是第一个出现的行.传入keep='list'参数,则保留最后一个出现的行.
两者都默认会对全部列做判断,在传入列索引组成的列表[‘列1’,‘列2’,…]作为参数后,可以只对这些列进行重复项判断.

利用函数或字典进行数据转换

series.map()接收一个函数或字典作为参数.使用map()方法是一种实现元素级转换以及其他数据清理工作的便捷方式.

dataframe的常见函数

dataframe.head()查询数据的前五行
dataframe.tail()查询数据的末尾五行
pandas.cut()设置区间,比如成绩信息的优良中差
pandas.qcut()基于分位数的离散化函数.基于秩或基于样本分位数将变量离散化为等大小桶
pandas.data_range()返回一个时间索引
dataframe.apply()沿相应轴应用函数
series.value_counts()返回不同数据的计数值
dataframe.aggregate()
dataframe.reset_index()重新设置index,参数drop=True时会丢弃原来的索引,设置新的从0开始的索引.常与groupby()一起用.
numpy.zeros()
参考文献:https://www.jianshu.com/p/840ba135df30

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值