总括

在数据分析工作中,Pandas 的使用频率是很高的,一方面是因为 Pandas 提供的基础数据结构 DataFrame 与 json 的契合度很高,转换起来就很方便。另一方面,如果我们日常的数据清理工作不是很复杂的话,你通常用几句 Pandas 代码就可以对数据进行规整。

Pandas 可以说是基于 NumPy 构建的含有更高级数据结构和分析能力的工具包。在 NumPy 中数据结构是围绕 ndarray 展开的,那么在 Pandas 中的核心数据结构是什么呢?

下面主要给你讲下 Series 和 DataFrame 这两个核心数据结构,他们分别代表着一维的序列和二维的表结构。基于这两种数据结构,Pandas 可以对数据进行导入、清洗、处理、统计和输出。

为什么要数据清洗


如图,我们采集到的数据,很可能有许多缺失值,异常值等,这就需要我们对这些数据进行整理,也就是数据清洗。

数据质量的准则

由于数据很多而且很杂,所以我们精确的统一规则是比较难的,所以可以将规则总结为以下 4 个关键点

  1. 完整性:单条数据是否存在空值,统计的字段是否完善。
  2. 全面性:观察某一列的全部数值,比如在 Excel 表中,我们选中一列,可以看到该列的平均值、最大值、最小值。我们可以通过常识来判断该列是否有问题,比如:数据定义、单位标识、数值本身。
  3. 合法性:数据的类型、内容、大小的合法性。比如数据中存在非 ASCII 字符,性别存在了未知,年龄超过了 150 岁等。
  4. 唯一性:数据是否存在重复记录,因为数据通常来自不同渠道的汇总,重复的情况是常见的。行数据、列数据都需要是唯一的,比如一个人不能重复记录多次,且一个人的体重也不能在列指标中重复记录多次。

数据结构:Series 和 DataFrame

Series

Series 是个定长的字典序列。说是定长是因为在存储的时候,相当于两个 ndarray,这也是和字典结构最大的不同。因为在字典的结构里,元素的个数是不固定的。

Series 有两个基本属性:index 和 values。在 Series 结构中,index 默认是 0,1,2,……递增的整数序列,当然我们也可以自己来指定索引,比如index=[‘a’, ‘b’, ‘c’, ‘d’]

这个例子中,x1 中的 index 采用的是默认值,x2 中 index 进行了指定。我们也可以采用字典的方式来创建 Series,比如:

DataFrame

它包括了行索引和列索引,我们可以将 DataFrame 看成是由相同索引的 Series 组成的字典类型。

我们虚构一个王者荣耀考试的场景,想要输出几位英雄的考试成绩:


在后面的案例中,我一般会用 df, df1, df2 这些作为 DataFrame 数据类型的变量名,我们以例子中的 df2 为例,列索引是[‘English’, ‘Math’, ‘Chinese’],行索引是[‘ZhangFei’, ‘GuanYu’, ‘ZhaoYun’, ‘HuangZhong’, ‘DianWei’]

数据导入和输出

Pandas 允许直接从 xlsx,csv 等文件中导入数据,也可以输出到 xlsx, csv 等文件,非常方便。


需要说明的是,在运行的过程可能会存在缺少 xlrd 和 openpyxl 包的情况,到时候如果缺少了,可以在命令行模式下使用“pip install”命令来进行安装。

数据清洗

数据清洗是数据准备过程中必不可少的环节,Pandas 也为我们提供了数据清洗的工具,在后面数据清洗的章节中会给你做详细的介绍,这里简单介绍下 Pandas 在数据清洗中的使用方法。

还是以上面这个王者荣耀的数据为例。

1. 删除 DataFrame 中的不必要的列或行

Pandas 提供了一个便捷的方法 drop() 函数来删除我们不想要的列或行。比如我们想把“语文”这列删掉。

2. 重命名列名 columns,让列表名更容易识别

如果你想对 DataFrame 中的 columns 进行重命名,可以直接使用 rename(columns=new_names, inplace=True) 函数,比如我把列名 Chinese 改成 YuWen,English 改成 YingYu。

3. 去重复的值

数据采集可能存在重复的行,这时只要使用 drop_duplicates() 就会自动把重复的行去掉

4. 格式问题

更改数据格式

这是个比较常用的操作,因为很多时候数据格式不规范,我们可以使用 astype 函数来规范数据格式,比如我们把 Chinese 字段的值改成 str 类型,或者 int64 可以这么写:

数据间的空格

想要删除数据间的空格,可以使用 strip 函数:

strip() 方法用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列。

注意:该方法只能删除开头或是结尾的字符,不能删除中间部分的字符。

大小写转换

大小写是个比较常见的操作,比如人名、城市名等的统一都可能用到大小写的转换,在 Python 里直接使用 upper(), lower(), title() 函数,方法如下:

查找空值

数据量大的情况下,有些字段存在空值 NaN 的可能,这时就需要使用 Pandas 中的 isnull 函数进行查找。比如,我们输入一个数据表如下:

如果我们想看下哪个地方存在空值 NaN,可以针对数据表 df 进行 df.isnull(),结果如下:

如果我想知道哪列存在空值,可以使用 df.isnull().any(),结果如下

使用 apply 函数对数据进行清洗

apply 函数是 Pandas 中自由度非常高的函数,使用频率也非常高。
比如我们想对 name 列的数值都进行大写转化可以用:

df['name'] = df['name'].apply(str.upper)

我们也可以定义个函数,在 apply 中进行使用。比如定义 double_df 函数是将原来的数值 *2 进行返回。然后对 df1 中的“语文”列的数值进行 *2 处理,可以写成:

def double_df(x):return 2*x
df1[u'语文'] = df1[u'语文'].apply(double_df)

我们也可以定义更复杂的函数,比如对于 DataFrame,我们新增两列,其中’new1’列是“语文”和“英语”成绩之和的 m 倍,'new2’列是“语文”和“英语”成绩之和的 n 倍,我们可以这样写:

def plus(df,n,m):df['new1'] = (df[u'语文']+df[u'英语']) * mdf['new2'] = (df[u'语文']+df[u'英语']) * nreturn df
df1 = df1.apply(plus,axis=1,args=(2,3,))

其中 axis=1 代表按照列为轴进行操作,axis=0 代表按照行为轴进行操作,args 是传递的两个参数,即 n=2, m=3,在 plus 函数中使用到了 n 和 m,从而生成新的 df。

数据统计

Pandas 和 NumPy 一样,都有常用的统计函数,如果遇到空值 NaN,会自动排除
常用的统计函数包括:

表格中有一个 describe() 函数,统计函数千千万,describe() 函数最简便。它是个统计大礼包,可以快速让我们对数据有个全面的了解。下面我直接使用 df1.descirbe() 输出结果为:

数据表合并

有时候我们需要将多个渠道源的多个数据表进行合并,一个 DataFrame 相当于一个数据库的数据表,那么多个 DataFrame 数据表的合并就相当于多个数据库的表合并。

比如我要创建两个 DataFrame并将其合并,有五种方式:


df1 = DataFrame({'name':['ZhangFei', 'GuanYu', 'a', 'b', 'c'], 'data1':range(5)})
df2 = DataFrame({'name':['ZhangFei', 'GuanYu', 'A', 'B', 'C'], 'data2':range(5)})

基于指定列进行连接

比如我们可以基于 name 这列进行连接。

inner 内连接

inner 内链接是 merge 合并的默认情况,inner 内连接其实也就是键的交集,在这里 df1, df2 相同的键是 name,所以是基于 name 字段做的连接:

3. left 左连接

左连接是以第一个 DataFrame 为主进行的连接,第二个 DataFrame 作为补充。

4. right 右连接

右连接是以第二个 DataFrame 为主进行的连接,第一个 DataFrame 作为补充。

5. outer 外连接

外连接相当于求两个 DataFrame 的并集。

总结

和 NumPy 一样,Pandas 有两个非常重要的数据结构:Series 和 DataFrame。

使用 Pandas 可以直接从 csv 或 xlsx 等文件中导入数据,以及最终输出到 excel 表中。

我重点介绍了数据清洗中的操作,当然 Pandas 中同样提供了多种数据统计的函数。最后我们介绍了如何将数据表进行合并,以及在 Pandas 中使用 SQL 对数据表更方便地进行操作。

Pandas 包与 NumPy 工具库配合使用可以发挥巨大的威力,正是有了 Pandas 工具,Python 做数据挖掘才具有优势。

以上知识pandas的很小一部分语法,还有更多的我总结如下:
pandas练习题(简单题)
原创pandas练习题(中等题)

这就是数据分析之Pandas与数据清洗相关推荐

  1. 【Python数据分析学习笔记Day3】(三)数据分析工具pandas,数据清洗,聚类K-Means

    Pandas学习 https://blog.csdn.net/qq_41251963/article/details/103904044 Pandas数据结构 import pandas as pd ...

  2. 数据分析工具Pandas(7):数据清洗、合并、转化和重构

    数据分析工具Pandas(1):Pandas的数据结构 数据分析工具Pandas(2):Pandas的索引操作 数据分析工具Pandas(3):Pandas的对齐运算 数据分析工具Pandas(4): ...

  3. 数据分析工具Pandas(3):Pandas的对齐运算

    数据分析工具Pandas(1):Pandas的数据结构 数据分析工具Pandas(2):Pandas的索引操作 数据分析工具Pandas(3):Pandas的对齐运算 Pandas的对齐运算 是数据清 ...

  4. 炼数成金数据分析课程---8、数据清洗

    炼数成金数据分析课程---8.数据清洗 一.总结 一句话总结: 数据分析课程的实质是:介绍库中的函数:介绍py的3个常用的数据分析库(numpy,pandas,scipy)的函数的操作 实例:其实找几 ...

  5. python常用命令汇总-python数据分析之pandas常用命令整理

    原标题:python数据分析之pandas常用命令整理 pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的.Pandas 纳入了大量库和一些标准的数据模型 ,提供了高效地 ...

  6. pandas 提取某几列_用Pandas做数据清洗,我一般都这么干……

    导读:​作为一名数据分析师,每天都在完成各种数据分析需求,其中数据清洗是必不可少的一个步骤.一般而言,当提及数据清洗时,其实是主要包括了缺失值处理.重复值处理和异常值处理三类操作,本文即围绕这这三个方 ...

  7. pandas 提取某几列_用pandas做数据清洗,我一般都这么干

    导读 作为一名数据分析师,每天都在完成各种数据分析需求,其中数据清洗是必不可少的一个步骤.一般而言,当提及数据清洗时,其实是主要包括了缺失值处理.重复值处理和异常值处理三类操作,本文即围绕这这三个方面 ...

  8. python 数据分析核心--pandas

    前言 Python作为一门数据可视化很好的语言,可以使用像matplotlib等库画出图形,处理数据主要使用pandas 这里主要讨论Pandas 初识pandas 大多数人只要提及pandas,基本 ...

  9. python 数据分析day4 Pandas 之 DataFrame

    DataFrame 一. 创建DataFrame 1. 二维数组创建 2. 字典创建 3. JSON创建 4. 读取Excel或CSV文件创建 5. 读数据库(MySQL)创建 二. 常用属性 三. ...

最新文章

  1. 2个422 并联一个总线_株洲新添2个全国“一村一品”示范村,一个在炎陵
  2. SourceForge 停止在被遗弃项目捆绑第三方软件
  3. 图像处理时一些卷积核子函数的生成
  4. 汇编-使用VS2008查看反汇编语言
  5. 2020年第十一届蓝桥杯 - 省赛 - C/C++大学生A组 - C.蛇形填数
  6. 原生微信小程序父组件调用子组件中的方法
  7. POJ 2593解题报告
  8. 【引用】jQuery 选择器
  9. Vscode合并develop代码分支到master开发分支
  10. Qt4_Laying Out Widgets Widgets
  11. mysql rpm 日志_mysql5.1.48-1的src.rpm包安装日志(一)
  12. Helm 3 完整教程(十九):Helm 流控制结构(3)range 语句
  13. mysql+mmm+主动模式_MySQL集群搭建(4)-MMM+LVS+Keepalived
  14. librdkafka------C kafka Client
  15. 我的世界基岩版好还是java版好_我的世界:Java版本好玩还是基岩版好玩?老玩家看完后沉默了...
  16. 移动端html5广告的优势,移动端H5广告的互动类型探析
  17. springboot 多任务并行执行
  18. 【论文精读】Temporal Fusion Transformers for Interpretable Multi-horizon Time Series Forecasting
  19. uniapp生成pdf文件
  20. 计算机毕业设计Java养老院信息管理(系统+源码+mysql数据库+Lw文档)

热门文章

  1. linux shell read line,【Linux shell】while read line
  2. 短信网关 php,通过ICQ网关发送手机短信的PHP源程序_PHP
  3. python字符串对比两项_Python之字符串比较is、==、__cmp__
  4. android5.1 投影显示器,5.1.1投影—投影与中心投影(一).ppt
  5. 编程语言c 是什么意思,C/C++知识点之C语言中%*s,%*c 是什么意思
  6. php将数组值用 分开,PHP将数组分成基于相等值的组
  7. python cookbook 小结
  8. 解题:HNOI 2008 玩具装箱
  9. windows 编程 —— 消息与参数(滚动条、键盘、鼠标)
  10. 构建高性能ASP.NET站点 开篇