欢迎光临散文网 会员登陆 & 注册

二文快速入门pandas

2023-07-31 16:20 作者:Echo_Wish  | 我要投稿

描述(概况)

对pandas的series和dataframe 类型有基本概念的了解,这一部分对使用pandas 进行简单的数据清洗 进行学习,填充删除替换空值,删除处理重复数据 这些简单的数据预处理操作 通过pandas 来非常简便。学习使用pandas 主要是为了更好更快的数据解析 得到数据可视化 所需的数据,但根据国赛的赛项规程 数据采集部分还需要数据预处理 这正好可以借助pandas实现。


pandas 数据清洗


1. 去除 NaN 值


在Pandas的各类数据Series和DataFrame里字段值为NaN的为缺失数据,不代表0而是说没有赋值数据,类似于python中的None值。数据的缺失有很多原因,缺失不是错误、无效,需要对缺失的数据进行必要的技术处理,以便后续的计算、统计。

可以通过numpy 模块的 nan 得到NaN 值。

首先,可以通过isnull 和 notnull 方法查看有哪些NaN值,这两个方法返回的布尔值,指示该值是否是NaN值,结合sum 方法可以获取每列空值的数目以及总数。也可以通过 count 方法得到每列不为NaN值的数目。

dropna()

删除NaN 值 可以通过 dropna 方法,默认按行扫描(操作),会将每一行有NaN 值的那一行删除,同时默认是对原对象的副本操作,不会对原对象产生影响,也可以通过inplace 指示是否直接在原对象上操作。

示例:



dropna 方法可以选择删除



通过布尔判断,也是可以实现删除 NaN 的功能。




2. 填充NaN 值


一般情况下直接将NaN删除或许并不是最好的选择因此可以通过将NaN值进行填充。


fillna()

fillna 方法可以将df 中的nan 值按需求填充成某值



复杂的 使用向前 或 向后 填充数据,依旧使用fillna 方法,所谓向前 是指 取出现NaN值的前一列或前一行的数据来填充NaN值,向后同理



也可以通过重新赋值的赋值来填充NaN值,即将一个series 赋值给df 的某一列 来达到删除NaN值的目的。


interpolate()

利用插值函数interpolate()对列向的数据进行填值。实现插值填充数据,那么要求这列上必须得有一些数据才可以,至少2个,会对起点和终点间的NaN进行插值。

示例:



可以看出,当待填充的列或行符合条件时,会从最近的那个非NaN值开始将之后的位置全部填充,填充的数值为列上保留数据的最大值最小值之间的浮点数值。


3. 删除重复数据


对于数据源中的重复数据,一般来讲没有什么意义,所以一般情况下都会进行删除操作。


duplicated()

duplicated 方法可以返回重复数据的分布情况,以布尔值显示。



drop_duplicated()

删除重复值,可以指定inplace 是否在原对象上直接操作,keep= last first false 等 默认first保留第一次出现的重复数据,last同时保留最后一次出现的重复数据,false 不保留


使用如上。



4. 数据匹配替换


简单数据删除填充有时并不能满足需求,因此需要数据进行匹配替换满足更进一步的需求。


map()

map函数可以将某列数据映射成其它数据



map 一般对index 和 series 等使用。


replace()

将数据替换成其他数据,可以一对一的替换也可一堆多的替换数据。




5. apply() 方法使用

replace、dropna、fillna函数要么针对NaN的某行或某列或某个,这些函数的作用有限,本章介绍的apply等函数可以针对整个Series或DataFrame的各个值进行相应的数据的处理

对series 使用apply



对dataframe 使用apply



df 中的applymap()

df 中使用applymap 可以对df 中的每一个元素进行操作




pandas 数据拼接


1. concat() 拼接方法


对series 操作



对dataframe 操作



当然,列标和行标不一定是对应的,这个时候两DataFrame未匹配上的label或columns下的值为NaN

concat 函数 同样的可以指定是按行操作还是按列操作。

指定拼接的轴,默认是列方向的拼接数据,可以指定concat 的形参axis为行上的拼接数据。

2. concat 的内外连接


concat 的内外连接,就是 join 参数的指定,为 inner 时为内连接,为outer 时外连接。





3. merge() 方法

merge函数可以真正实现数据库的内外连接,且外连接还可以有左右连接的特性。

补充:

内连接,对两张有关联的表进行内连接操作,结果表会是两张表的交集,例如A表和B表,如果是A 内连接(inner join)B表,结果表是以A为基准,在B中找寻A匹配的行,不匹配则舍弃,B内连接A同理。

外连接,分左外连接,右外连接,全连接,左外连接是左表上的所有行匹配右表,正常能匹配上的取B表的值,不能的取空值,右外连接同理,全连接则是取左并上右表的的所有行,没能匹配上的用空值填充。


merge 默认是内连接



merge可以进行左外连接,右外连接,全连接。




pandas 数据分组


1. groupby 方法

DataFrame数据对象经groupby()之后有ngroups和groups等属性,其本质是DataFrame类的子类DataFrameGroupBy的实例对象。ngroups反应的是分组的个数,而groups类似dict结构,key是分组的index或label,value则为index或label所对应的分组数据。size函数则是可以返回所有分组的字节大小。count函数可以统计分组后各列数据项个数。get_group函数可以返回指定组的数据信息。而discribe函数可以返回分组后的数据的统计数据。

简单的按单列分组




也支持多列分组



2. aggregate 聚合

在使用groupby 分组完成后,借助aggregate函数可以 经过分组后 每组进行操作。

agg的形参是一个函数会对分组后每列都应用这个函数。



也可以应用多个函数



可以对每列数组进行不同的聚合操作




3. transform() 方法

可以作用于groupby之后的每个组的所有数据,之前的aggregate函数只能用于分组后组的每列数据。




pandas 时间序列


时间序列数据在金融、经济、神经科学、物理学里都是一种重要的结构化的数据表现形式。

pandas 最基本的时间序列类型就是以时间戳(TimeStamp)为 index 元素的 Series 类型。Python和Pandas里提供大量的内建工具、模块可以用来创建时间序列类型的数据。

1. datetime 模块

Python的datetime标准模块下的

date子类可以创建日期时间序列的数据

time子类可创建小时分时间数据

datetime子类则可以描述日期小时分数据



datetime的timedelta模块给出时间间隔(差)

借助timedelta 可以定义时间时间间隔




用datetime数据创建time series时间序列数据。意思就是用datetime创建的时间作为index。.




2. TimeStamp

在pandas里可以使用pandas.tslib.Timestamp类来实现时间序列.


二文快速入门pandas的评论 (共 条)

分享到微博请遵守国家法律