二文快速入门pandas

描述(概况)
对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类来实现时间序列.