系列文章目录


Python数据分析入门笔记1——学习前的准备
Python数据分析入门笔记2——pandas数据读取
Python数据分析入门笔记3——数据预处理之缺失值
Python数据分析入门笔记4——数据预处理之重复值
Python数据分析入门笔记5——数据预处理之异常值

Python数据分析入门笔记

  • 系列文章目录
  • 前言
  • 一、数据获取
  • 二、数据清理
    • 1. 缺失值处理
    • 2. 重复值处理
    • 3. 异常值处理
  • 声明

前言

案例资源文件:点击下载二手房数据表格
二手房数据存在一些问题。要求使用pandas库对这组数据进行清理,具体步骤如下:

  1. 检测缺失值,一旦发现缺失值就将其删除。
  2. 检测重复值,一旦发现重复值就将其删除。
  3. 检测二手房数据“单价(元/平方米)”列的异常值,一旦确定是真异常值就将其删除。

一、数据获取

  1. 打开excel文件,探索整体数据,直接观测。
    文件部分数据如图:

    可以很明显的看到,“地铁”列存在缺失数据,其他问题暂时看不出来。

  2. 首先使用pandas的read_excel方法,读取数据

    可以很明显的看到,“地铁”列的数据缺失,默认用NaN值来填充。

  3. 数据获取之后,可以用info()函数来查看二手房数据的摘要信息。

    可以看出,二手房数据各列非空值的数量以及数据类型, 还能看到除了“地铁”列外,小区名称也有缺失。

二、数据清理

    由于二手房数据中可能包含缺失值、重复值和异常值,下面分别进行处理。

1. 缺失值处理

    缺失数据列:地铁,小区名称。
    结合实际情况分析,小区的地理位置可能远离地铁,因此“地铁”列的缺失值无需处理。这里只需要删除“小区名称”列中的缺失值即可。
    用dropna()方法来删除“小区名称”列包含缺失值的一行数据。

# 删除小区名称列的缺失值
second_hand_house = second_hand_house.dropna(subset=['小区名称'])
second_hand_house

执行结果:

可以看出,删除缺失值后,二手房数据剩余1057行,比之前减少了一行

2. 重复值处理

使用duplicated()方法先检测二手房数据中是否有重复值。

# 对删除缺失值后的数据进行重复值检测
second_hand_house.duplicated()

执行结果如下:

由于被检测的数据量较大,无法直接看出都有哪些行被标记为了True,所以需要加个筛选,筛选出结果对象中值为True的值,即重复项。

# 显示二手房数据中的重复项
second_hand_house[second_hand_house.duplicated().values == True]

然后删除重复项

# 删除重复值,并对索引重新排序
second_hand_house = second_hand_house.drop_duplicates(ignore_index=True)
second_hand_house

执行结果如下:

可以看出,删除重复数据以后,还剩999条。

3. 异常值处理

    结合实际逻辑,制定方案,对关键列进行检查。
    缺失值和重复值处理完之后,还需检测“单价”列中是否包含异常值。
    因为每个楼盘的地理位置、配套设施、以及开盘时间各不相同,所以每个小区的出售价格也不相同,无法直接对“单价”列进行异常值检测。
    为了准确地检测异常值,这里先按小区名称对数据进行分组,再分别对每个分组进行异常值检测。
以“翡翠城四期”小区为例,使用箱型图检测该小区“单价”数据是否存在异常值。

from matplotlib import pyplot as plt
# 设置中文显示
plt.rcParams['font.sans-serif'] = ['SimHei']
# 筛选小区名称为“翡翠城四期”的数据
estate = second_hand_house[second_hand_house['小区名称'].values == '翡翠城四期' ]
box = estate.boxplot(column='单价(元/平米)')
plt.show()


从图上可以看到,箱型图中有一个异常值。
对于被检测出来的异常值,我们需要先查看具体是哪些数据,之后再决定是否删除。
定义一个用于获取异常值及其索引的函数box_outliers():

def box_outliers(ser):# 对需要检测的数据集进行排序new_ser = ser.sort_values()# 判断数据的总数量是奇数还是偶数if new_ser.count() % 2 == 0:# 分别计算Q3、Q1、IQRQ3 = new_ser[int(len(new_ser) / 2):].median()Q1 = new_ser[:int(len(new_ser) / 2)].median()elif new_ser.count() % 2 != 0:Q3 = new_ser[int((len(new_ser)-1) / 2):].median()Q1 = new_ser[:int((len(new_ser)-1) / 2)].median()IQR = round(Q3 - Q1, 1)rule = (round(Q3+1.5 * IQR, 1)<ser) | (round(Q1-1.5 * IQR, 1) > ser)index = np.arange(ser.shape[0])[rule]# 获取包含异常值的数据outliers = ser.iloc[index]return outliers

依次获取每个小区数据,并使用box_outliers()函数检测数据中是否包含异常值,返回数据中的异常值及其对应的索引。

# 保存异常值索引
outliers_index_list = []
# 遍历所有小区名称
for i in set(second_hand_house['小区名称']):# 筛选小区名称为i的所有二手房数据集estate = second_hand_house[second_hand_house['小区名称'].values == i]# 调用箱型图函数,检测小区名称为i的数据中单价列是否有异常值,返回异常值行索引列表outliers_indexoutliers_index = box_outliers(estate['单价(元/平米)'])# 只要有异常值,即异常值列表长度不为零if len(outliers_index) != 0:# 将异常值的索引添加到定义的列表中outliers_index_list.append(outliers_index.index.tolist())# 此时的outliers_index_list为嵌套列表,将其转换为单层列表
outliers_index_single_li = sum(outliers_index_list, [])

根据以上获得的索引,可访问含有异常值的数据:

second_hand_house.loc[[i for i in outliers_index_single_li]]


经检查,这些异常值我们选择调用drop()方法直接删掉。

second_hand_house.drop(0)


声明

本文资源来自人民邮电出版社的《Python数据预处理》,作者是黑马程序员。

Python数据分析入门笔记6——数据清理案例练习相关推荐

  1. Python数据分析入门笔记9——数据预处理案例综合练习(男篮女篮运动员)

    系列文章目录 Python数据分析入门笔记1--学习前的准备 Python数据分析入门笔记2--pandas数据读取 Python数据分析入门笔记3--数据预处理之缺失值 Python数据分析入门笔记 ...

  2. Python数据分析入门笔记4——数据预处理之重复值

    系列文章目录 Python数据分析入门笔记1--学习前的准备 Python数据分析入门笔记2--pandas数据读取 Python数据分析入门笔记3--数据预处理之缺失值 Python数据分析入门笔记 ...

  3. Python数据分析入门笔记5——数据预处理之异常值

    系列文章目录 Python数据分析入门笔记1--学习前的准备 Python数据分析入门笔记2--pandas数据读取 Python数据分析入门笔记3--数据预处理之缺失值 Python数据分析入门笔记 ...

  4. Python数据分析入门笔记10——简单案例练习(学生信息分析)

    系列文章目录 Python数据分析入门笔记1--学习前的准备 Python数据分析入门笔记2--pandas数据读取 Python数据分析入门笔记3--数据预处理之缺失值 Python数据分析入门笔记 ...

  5. python做大数据分析入门_独家|Python数据分析入门指南 - 大数据123 | 大数据导航网...

    有一个朋友最近问到这个问题,我觉得把它公开出来对其他人也会有帮助.这是给完全不了解Python而想找到从零到一的最简单的路径的人的建议: 1. 在这里(https://www.continuum.io ...

  6. python数据分析入门学习笔记

    python数据分析入门学习笔记儿 学习利用python进行数据分析的笔记儿&下星期二内部交流会要讲的内容,一并分享给大家.博主粗心大意,有什么不对的地方欢迎指正~还有许多尚待完善的地方,待我 ...

  7. python数据分析入门

    python数据分析入门,作为入门文章系列主要包含以下几个内容: 1.数据的来源(本案例采用的数据来自于上一篇文章中爬取的智联招聘信息):读取数据库数据.数据写入csv文件.读取csv文件等 2.数据 ...

  8. Python数据分析:常见的数据预处理方法

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 以下文章来源于数据杂论,作者:Wpc7113 Python 数据分析入门案例讲解 https:// ...

  9. python数据分析要学什么_python数据分析学什么?python数据分析入门

    有很多没有基础的新手想学习python数据分析,却在纠结python数据分析难不难学?下面万古网校小编给大家整理了资料,为各位分享! 1.python难不难? Python可以说是目前比较主流而且易学 ...

最新文章

  1. iOS环信3.1·集成·功能的实现
  2. PDA(Personal Digital Assistance)
  3. 从单体应用到微服务架构演化
  4. C++ Primer 5th笔记(chap 17 标准库特殊设施)正则表达式
  5. 并查集 - 交换字符串中的元素
  6. 从流量控制算法谈网络优化-TCP核心原理理解
  7. linux脚本判断流程控制,linux shell awk 流程控制语句(if,for,while,do)详细介绍
  8. 找出两个字符串数组中的相同元素
  9. ASP.NET Core 对Controller进行单元测试
  10. jzoj3738-[NOI2014模拟7.11]理想城市(city)【树,模型转换】
  11. python入门应该学什么专业好_真的能半个月学会Python吗?(文末附python入门进阶教程)...
  12. 技术博客2013年2月份头条记录
  13. DELPHI基础教程 第二章 Delphi面向对象的编程方法
  14. poi导出如何设定宽度_POI导出excel列宽自适应
  15. TMEA:源于音乐,高于盛典
  16. 清除Windows远程桌面连接记录
  17. 【开箱】索尼A6000微单入手
  18. Springboot整合Redis实现腾讯云发送短信验证码并实现注册功能
  19. 【修真院java小课堂】HashMap浅析
  20. kesu移动硬盘(固态硬盘)插上电脑后不显示盘符的解决办法

热门文章

  1. 那些年我们一起追过的美剧
  2. IT人系列一 王珅:程序员转型做旧书书商年交易额逾千万
  3. 以Mapgis与Arcinfo之间的数据转换
  4. Pygame:播放声音和音效
  5. 编写程序,根据输入的n,输出如下例所示的图形。
  6. 基于ServiceStage的微服务开发与部署(二)
  7. 计算器算贝塞尔公式_买车贷款怎么算利息?
  8. linux hosts的allow和deny
  9. HEVC视频扩展解决方法
  10. Leetcode C语言 “加一”