林骥的第 38 篇文章

0. 序言在做数据分析之前,我们首先要明确数据分析的目标,然后应用数据分析的思维,对目标进行细分,再采取相应的行动。我们可以把数据分析细分为以下 8 个步骤:(1)读取(2)清洗(3)操作(4)转换(5)整理(6)分析(7)展现(8)报告在《如何用 Python 读取数据?》这篇文章中,我们学习了从 5 种不同的地方读取数据的方法,接下来,我们将利用其中的一种方法,从  Excel 文件中读取原始数据,然后利用 Python 对它进行清洗。下面我们用一副待清洗的扑克牌作为示例,假设它保存在代码文件相同的目录下,在 Jupyter Lab 环境中运行以下代码:

import numpy as npimport pandas as pd

# 设置最多显示 10 行pd.set_option('max_rows', 10)

# 从 Excel 文件中读取原始数据df = pd.read_excel('待清洗的扑克牌数据集.xlsx')

df

返回结果如下:这幅待清洗的扑克牌数据集,有一些异常情况,包括:大小王的花色是缺失的,有两张重复的黑桃♠️ A,还有一张异常的黑桃♠️ 30。1. 如何查找异常?在正式开始清洗数据之前,往往需要先把异常数据找出来,观察异常数据的特征,然后再决定清洗的方法。

# 查找「花色」缺失的行df[df.花色.isnull()]

# 查找完全重复的行df[df.duplicated()]

# 查找某一列重复的行df[df.编号.duplicated()]

# 查找牌面的所有唯一值df.牌面.unique()

返回结果:array(['大王', '小王', 'A', '30', 4, 5, 6, 7, 8, 9, 10, 'J', 'Q', 'K', 2, 3], dtype=object)根据常识可以判断,牌面为 30 的是异常值。

# 查找「牌面」包含 30 的异常值df[df.牌面.isin(['30'])]

# 查找王牌,模糊匹配df[df.牌面.str.contains('王', na=False)]

# 查找编号在 1 到 5 之间的行df[df.编号.between(1, 5)]

查找某个区间,也可以用逻辑运算的方法来实现:

# 查找编号在 1 到 5 之间的行df[(df.编号 >= 1)   & (df.编号 <= 5)]

其中「 & 」代表必须同时满足两边的条件,也就是「且」的意思。还可以用下面等价的方法:

# 查找编号在 1 到 5 之间的行df[~((df.编号 < 1)     | (df.编号 > 5))]

其中「 | 」代表两边的条件满足一个即可,也就是「或」的意思,「 ~ 」代表取反,也就是「非」的意思。2. 如何排除重复?使用 drop_duplicates() 函数,在排除重复之后,会得到一个新的数据框。

# 排除完全重复的行,默认保留第一行
df.drop_duplicates()

返回结果如下:如果想要改变原来的数据框,有两种方法,一种方法,是增加 inplace 参数:

# 排除重复后直接替换原来的数据框df.drop_duplicates(    inplace=True)

另一种方法,是把得到的结果,重新赋值给原来的数据框:

# 排除重复后,重新赋值给原来的数据框
df = df.drop_duplicates()

如果想要按某一列排除重复的数据,那么指定相应的列名即可。

# 按某一列排除重复,默认保留第一行df.drop_duplicates(['花色'])

如果想要保留重复的最后一行,那么需要指定 keep 参数。

# 按某一列排除重复,并保留最后一行df.drop_duplicates(    ['花色'], keep='last')

从上面两个返回结果的编号可以看出,不同方法的差异情况。3. 如何删除缺失?使用 dropna() 函数,默认删除包含缺失的行。为了更加简单易懂,我们用扑克牌中不重复的花色作为示例。

# 不重复的花色color = df.drop_duplicates(    ['花色'])

color

# 删除包含缺失值的行color.dropna()

如果想要删除整行全部为空的行,那么需要指定 how 参数。

# 删除全部为空的行color.dropna(how='all')

如果想要删除包含缺失值的列,那么需要指定 axis 参数。

# 删除包含缺失值的列color.dropna(axis=1)

可以看到,包含缺失值的「花色」这一列被删除了。4. 如何补全缺失?使用 fillna() 函数,可以将缺失值填充为我们指定的值。

# 补全缺失值color.fillna('Joker')

可以看到,原来的 NaN 被填充为 Joker,在实际工作的应用中,通常填充为 0,也就是说, fillna(0) 是比较常见的用法。如果想要使用临近的值来填充,那么需要指定 method 参数,例如:

# 用后面的值填充color.fillna(method='bfill')

可以看到,原来第一行的 NaN 替换成了第二行的「黑桃♠️」。其中 method 还有一些其他的可选参数,详情可以查看相关的帮助文档。还有一种按字典填充的方法。为了让下面的演示更加直观易懂,我们先把索引为 2 的牌面设置为缺失值:

# 为了演示,先指定一个缺失值
color.loc[2, '牌面'] = np.nan
color

# 按列自定义补全缺失值color.fillna(    {'花色': 0, '牌面': 1})

可以看出,不同列的缺失值,可以填充为不同的值,花色这一列填充为 0,牌面这一列填充为 1,我在图中分别用红色的方框标记出来了。5. 应用案例下面我们用 Python 代码,把这幅待清洗的扑克牌数据集,变成一副正常的扑克牌数据。

import numpy as npimport pandas as pd

# 设置最多显示 10 行pd.set_option('max_rows', 10)

# 从 Excel 文件中读取原始数据df = pd.read_excel('待清洗的扑克牌数据集.xlsx')

# 补全缺失值df = df.fillna('Joker')

# 排除重复值df = df.drop_duplicates()

# 修改异常值df.loc[4, '牌面'] = 3

# 增加一张缺少的牌df = df.append(    {'编号': 4,'花色': '黑桃♠','牌面': 2},    ignore_index=True)

# 按编号排序df = df.sort_values('编号')

# 重置索引df = df.reset_index()

# 删除多余的列df = df.drop(    ['index'], axis=1)

# 把清洗好的数据保存到 Excel 文件df.to_excel('完成清洗的扑克牌数据.xlsx',    index=False)

df

返回结果如下:

可以看到,我们已经成功地把它变成了一副正常的扑克牌数据。6. 小结我们简单回顾一下本文的主要内容,首先,我们从宏观层面介绍了数据分析的 8 个步骤,然后用一副待清洗的扑克牌数据集作为示例,从读取数据,到查找异常,再到排除重复、删除缺失和补全缺失,最后,我们用一个案例,完整演示了清洗数据的过程。如果你想要获取本文的案例数据,请前往林骥的公众号后台回复「清洗」。猜你喜欢如何用 Python 读取数据?用扑克牌演示 Python 数据分析数据分析的 8 种思维

python删除excel第一行_如何用 Python 清洗数据?相关推荐

  1. python write 写多行_如何用 Python 执行单行命令

    一般来说,面对日常处理的一些小任务,直接用 sed,grep 之类的就可以搞定,更复杂一点的就会考虑 awk 或者用一些现成的轮子,要是 awk 搞不定我就只好用 Python 了.但有些时候,我仅仅 ...

  2. python 拆分excel单元格_如何用Python拆分合并后的Excel单元格?

    我尝试只拆分Excel文件中的合并单元格(包含多个工作表),如下所示: 请注意有部分/全部空行.这些行不会合并.在 使用openpyxl,我在每个工作表中找到了合并的单元格区域,代码如下:wb2 = ...

  3. python删除excel某行的格式_Python+Xlwings 删除Excel的行和列

    这篇文章主要介绍了Python+Xlwings 删除Excel的行和列的方法,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下 一.需求: 某公司管理的多个资管计划每天生成A表,业务人员需 ...

  4. python怎么合并多个excel表 视频_()如何用python合并两个excel表格

    ()如何用python合并两个excel表格 python合并excel表格视频教程2020-09-25 04:04:33人已围观 python实现excel合并 Created on Mon Mar ...

  5. 怎样用python搭建简单的系统_如何用Python搭建一个简单的推荐系统?

    推荐系统的相关知识我们已在前文中提到,在这篇文章中,我们会介绍如何用Python来搭建一个简单的推荐系统. 本文使用的数据集是MovieLens数据集,该数据集由明尼苏达大学的Grouplens研究小 ...

  6. 用python做舆情分析系统_如何用Python做舆情时间序列可视化?

    如何批量处理评论信息情感分析,并且在时间轴上可视化呈现?舆情分析并不难,让我们用Python来实现它吧. 痛点 你是一家连锁火锅店的区域经理,很注重顾客对餐厅的评价.从前,你苦恼的是顾客不爱写评价.最 ...

  7. python情绪分析的意义_如何用Python和R对故事情节做情绪分析?

    想知道一部没看过的影视剧能否符合自己口味,却又怕被剧透?没关系,我们可以用情绪分析来了解故事情节是否足够跌宕起伏.本文一步步教你如何用Python和R轻松愉快完成文本情绪分析.一起来试试吧. 烦恼 追 ...

  8. python能制作游戏吗_如何用python写一个小游戏

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 引言最近python语言大火,除了在科学计算领域python有用武之地之外,在游 ...

  9. python简单可视化聊天界面_如何用Python制作可视化输入界面

    继续研究Python的应用,我们在有些程序中需要输入一些参数,可由几种方式实现 1.直接写在程序里,适合编程使用 2.使用input()函数,运行程序时输入 3.做成可视化界面,然后让程序获得 今天主 ...

最新文章

  1. 分布式任务队列 Celery — Overview
  2. 如何查看Python安装目录
  3. 博士申请 | 北京理工大学宋承天老师组招收目标感知与识别方向博士生
  4. mysql 5.7 多实例_MySQL 5.7--------多实例部署最佳实战
  5. javascript --- 属性描述符
  6. Spring WebSocket初探2 (Spring WebSocket入门教程)
  7. c语言兔子洞,数据结构水题选讲 - osc_y08db3kb的个人空间 - OSCHINA - 中文开源技术交流社区...
  8. table每行自动触发ajax,table.ajax.reload()成功后未触发:function()
  9. Sublime Merge Stage时提示系统找不到指定的文件
  10. 大厂十年IT老兵血泪教训,IT人到底要如何选择合适的报表工具?
  11. java 类的继承 例题_Java_接口与类之间继承例题
  12. 修改Linux里的hosts文件
  13. 图论及其应用 2011年 期末考试 答案总结
  14. 除了用jenkins,还有什么方法可实现持续集成?
  15. K8S 探针 readinessProbe、livenessProbe和startupProbe
  16. iOS 苹果登录(第三方登录)
  17. 布同:统计英文单词的个数
  18. RAKsmart:查询在线服务器的方法
  19. 土豆皮,蒜苗长短,胡萝卜
  20. 《XX项目产品需求说明书-精华版》

热门文章

  1. OSX下解决PIL的IOError: decoder jpeg not available 问题
  2. Python OpenCV显示图像并保存图像
  3. Q107:Linux系统下GDB对PBRT-V3进行debug
  4. Q106:Linux系统下安装编译PBRT-V3
  5. erp沙盘采购总监的心得_经验分享 让ERP系统操作少走冤枉路
  6. 数据大屏可视化展示系统有什么作用
  7. Appium 元素查找(一)
  8. 苹果6可以分屏吗_苹果可以5g网络吗
  9. HDU1285确定比赛名次(拓扑排序+优先队列)
  10. 免费的html空间,免费HTML网页空间(每月200 GB 流量托管静态网页超简单)