首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

玩转Pandas,让数据处理更easy系列5

01

系列回顾

玩转Pandas系列已经连续推送4篇,尽量贴近Pandas的本质原理,结合工作实践,按照使用Pandas的逻辑步骤,系统地并结合实例推送Pandas的主要常用功能,已经推送的4篇文章:

玩转Pandas,让数据处理更easy系列1

玩转Pandas,让数据处理更easy系列2

玩转Pandas,让数据处理更easy系列3

玩转Pandas,让数据处理更easy系列4

以上4篇总结了Pandas主要的两个数据结构:

  • Series(一维)和DataFrame(二维),
  • 系统地介绍了创建,索引,增删改查Series, DataFrame等常用操作接口,
  • 总结了Series如何装载到DataFrame中,以及一个实际应用多个DataFrame的实战项目例子。
  • 总结了多层索引,Pivot操作,sort操作等

值得推荐的是,Pandas广泛应用在金融,统计,社会科学,和许多工程领域。Pandas和R语言直接无缝衔接。Pandas是基于Numpy(Numpy基于Python)基础开发,因此能和带有第三方库的科学计算环境很好地进行集成。

02

Pandas核心应用场景

按照使用逻辑,盘点Pandas的主要可以做的事情:

  1. 能将Python, Numpy的数据结构灵活地转换为Pandas的DataFrame结构(玩转Pandas,让数据处理更easy系列1; 玩转Pandas,让数据处理更easy系列2)
  2. DataFrame可以方便地实现增加和删除行、列 ( 玩转Pandas,让数据处理更easy系列2)
  3. 智能地带标签的切片,好玩的索引提取大数据集的子集(玩转Pandas,让数据处理更easy系列2 )
  4. 自动数据对齐,完全可以不考虑行、列标签,直接append list.
  5. 灵活地对数据集Reshape和按照不同轴变化数据的Pivot操作。玩转Pandas,让数据处理更easy系列4
  6. 强大的I/O操作。提供接口: CSV and delimited, Excel files, databases, and saving / loading data from the ultrafast HDF5 format.(玩转Pandas,让数据处理更easy系列2)
  7. 通俗易懂地在DataFrame结构上实现merge和join操作(merge操作见:玩转Pandas,让数据处理更easy系列3)
  8. 善于处理missing data,如NaN, non-floating数据。
  9. 强大而灵活的分组功能,在数据集上实现分-应用-合的操作,达到整合和改变数据形状的目的。
  10. 时间序列的处理功能,生成 data range,移动的时间窗,时间移动和lagging等。

03

处理Missing data

missing data,缺失数据,在数据系统中是比较常见的一个问题,而pandas的设计目标就是让missing data的处理工作尽量轻松。

pandas使用浮点NaN表示浮点和非浮点数组中的缺失数据,它没有什么具体意义,只是一个便于被检测出来的标记而已,pandas对象上的所有描述统计都排除了缺失数据。

下面看下关于missing data处理常用的几个API。 isnull 返回一个含有布尔的对象,这些布尔表示哪些是缺失

notnull isnull 的否定式

dropna 根据各标签中是否存在缺失数据对轴标签进行过滤,返回不为NaN的值,具体里面的参数包括:

DataFrame.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)

fillna 用指定值填充NaN值, DataFrame.fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None, **kwargs)

其中,method : {‘backfill’, ‘bfill’, ‘pad’, ‘ffill’, None}, default None

axis : {0 or ‘index’, 1 or ‘columns’}

举例说明如何使用,假如有如下一张表 pd_data

调用pd_data.isnull(),返回所有元素是否为null的布尔结果:

调用 pd_data.dropna(),默认值下,axis=0 , how=any,也就是只要每行中有一个元素为NaN,则直接过滤掉此行,返回的结果如下所示:

调用pd_data.fillna(),采用标量值填充,则所有的NaN值都取为1.0,

pd_data4.fillna(1)

采用字典值填充,对应的列取对应字典中的填充值:

pd_data4.fillna({'name':'none','score':60,'rank':'none'})

再说method关键词填充效果,当method设置为 ffill时,填充效果如下所示,取上一个有效值填充到下面行,

原有NaN的表格:

执行如下:

pd_data.fillna(method='ffill')

执行如下:

pd_data.fillna(method='backfill')

04

concatenate操作

concatenate是连接两个及以上的DataFrame的操作,一个简单的concatenate例子,给定两个DataFrame,concatenate它们,

df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'], 'B': ['B0', 'B1', 'B2', 'B3'], 'C': ['C0', 'C1', 'C2', 'C3'], 'D': ['D0', 'D1', 'D2', 'D3']}, index=[0, 1, 2, 3]) df2 = pd.DataFrame({'A': ['A4', 'A5', 'A6', 'A7'], 'B': ['B4', 'B5', 'B6', 'B7'], 'C': ['C4', 'C5', 'C6', 'C7'], 'D': ['D4', 'D5', 'D6', 'D7']}, index=[4, 5, 6, 7]) result = pd.concat( [df1,df2] )

df1:

df2:

合并后:

默认axis=0,即沿着行方面连接,如果axis设置为1,会沿列方向扩展,行数为两者间行数的较大者,较小的用NaN填充。

concatenate还可以创建带层级的索引,关于这部分暂不展开介绍。

以上总结了DataFrame在处理空缺值的常用操作,及连接多个DataFrame的concat操作。

小编对所推文章分类整理,欢迎后台回复数字,查找感兴趣的文章: 1. 排序算法

2. 图算法(含树)

3. 动态规划

4. LeetCode

5. Python

6. 数据处理三剑客 7. 数学知识

8. 数据预处理

9. 机器学习算法实例大全 10. 深度学习

11. Tensorflow

12. 自然语言处理 13. 上海沙龙

下一篇
举报
领券