爬虫练习之数据清洗——基于Pandas-阿里云开发者社区

开发者社区> fesoncn> 正文

爬虫练习之数据清洗——基于Pandas

简介: 本次以51Job上在东莞地区爬取的以Java为关键词的招聘数据 包括salary company time job_name address字段 当我把招聘网站上的数据爬下来的时候,内心是很开心的 爬下来的原始数据 但是! What?! 这是什么数据? 而且还不止一条!!! 待清洗数据 待清洗数据 第一次数据清洗 根据上述截图可以发现,脏数据都包含了xx元/小时以及xx元/天。
+关注继续查看
本次以51Job上在东莞地区爬取的以Java为关键词的招聘数据
包括salary company time job_name address字段

当我把招聘网站上的数据爬下来的时候,内心是很开心的


爬下来的原始数据
但是!
What?!

这是什么数据?

而且还不止一条!!!

待清洗数据
待清洗数据

第一次数据清洗

根据上述截图可以发现,脏数据都包含了xx元/小时以及xx元/天。一般我们IT行业很少以小时或者以天计算工资(如果担心清洗了正确的数据,可以后面再做检验)

思路
首先寻找合适的Pandas函数

清理数据相关的函数有

drop()
duplicated()
drop_duplicates()
dropna()

我们并不是要去重, 而是要删掉这部分数据
但是在网络上搜索清洗数据, 我找半天找不到对应的答案, 大部分都是去重, 替换, 去除空数据等等. 我决定跟着自己的思路, 利用drop函数来实现数据清洗

先help一下

drop(self, labels, axis=0, level=None, inplace=False, errors='raise') method of pandas.core.frame.DataFrame instance
    Return new object with labels in requested axis removed.
    
    Parameters
    ----------
    labels : single label or list-like
    axis : int or axis name
    level : int or level name, default None
        For MultiIndex
    inplace : bool, default False
        If True, do operation inplace and return None.
    errors : {'ignore', 'raise'}, default 'raise'
        If 'ignore', suppress error and existing labels are dropped.
    
        .. versionadded:: 0.16.1
    
    Returns
    -------
    dropped : type of caller

可以看到, labels是必选参数, 支持单个或者列表

找出脏数据

从drop函数的帮助文档,我们可以想到这样的思路.

先找到对应的脏数据, 再把这些脏数据的index列表找到, 通过drop函数把index对应的所有数据删除

根据上面的思路, 找pandas函数
一开始我找的是query(), where, loc等,但发现不知道怎么模糊查询, 用like报错了
最后查找到

# 这样将得到true or false
df['字段'].str.contains(r'正则表达式')

# 这样才能得到DataFrame
df[df['字段'].str.contains(r'正则表达式')]

# 具体代码
df_dirty = df[df['salary'].str.contains(r'(小时|天)+')]
确认无误并删除
# df.index返回一个index列表
df_clean = df.drop(df_dirty.index)
检验是否删除成功
df.info()
df_dirty.info()
df_clean.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 354 entries, 0 to 353
Data columns (total 5 columns):
salary      354 non-null object
company     354 non-null object
time        354 non-null object
job_name    354 non-null object
address     354 non-null object
dtypes: object(5)
memory usage: 13.9+ KB
<class 'pandas.core.frame.DataFrame'>
Int64Index: 28 entries, 5 to 321
Data columns (total 5 columns):
salary      28 non-null object
company     28 non-null object
time        28 non-null object
job_name    28 non-null object
address     28 non-null object
dtypes: object(5)
memory usage: 1.3+ KB
<class 'pandas.core.frame.DataFrame'>
Int64Index: 326 entries, 0 to 353
Data columns (total 5 columns):
salary      326 non-null object
company     326 non-null object
time        326 non-null object
job_name    326 non-null object
address     326 non-null object
dtypes: object(5)
memory usage: 15.3+ KB

可以看到,脏数据已经被删除

完整代码

import pandas as pd
import numpy as np

df = pd.read_csv(r'PycharmProjects/JobCrawler/job.csv')

df_dirty = df[df['salary'].str.contains(r'(小时|天)+')]
df_clean = df.drop(df_dirty.index)

几行代码就搞定, 再一次感受到Python的简洁, 时间花在思考上更多

第二次数据清洗

这次针对的是job_name字段, 方式和第一次清洗的方式相同

待清洗数据-job_name

可以发现为了躲避清理, 这些招聘信息搞出来的各种名字, 连*号都出现了

# 加上这一行就可以找出job_name字段的脏数据啦
df_dirty = df[df['job_name'].str.contains(r'(\*|在家|试用|体验)+')]

完整代码

import numpy as np
import pandas as pd

df = pd.read_csv(r'PycharmProjects/JobCrawler/job.csv')

df_dirty_salary = df[df['salary'].str.contains(r'(小时|天)+')]

df_dirty_job_name = df[df['job_name'].str.contains(r'(\*|在家|试用|体验|无需|无须|试玩|红包)+')]

df_dirty = pd.concat([df_dirty_salary, df_dirty_job_name])

df.drop(df_dirty.index)

df_clean = df.drop(df_dirty.index)

df_clean
参考文献
使用python进行数据清洗
http://bluewhale.cc/2016-08-21/python-data-cleaning.html

正则表达式 - 语法
http://www.runoob.com/regexp/regexp-syntax.html

Pandas合并数据集
http://blog.csdn.net/u010414589/article/details/51135840

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
爬虫练习之数据清洗——基于Pandas
本次以51Job上在东莞地区爬取的以Java为关键词的招聘数据 包括salary company time job_name address字段 当我把招聘网站上的数据爬下来的时候,内心是很开心的 爬下来的原始数据 但是! What?! 这是什么数据? 而且还不止一条!!! 待清洗数据 待清洗数据 第一次数据清洗 根据上述截图可以发现,脏数据都包含了xx元/小时以及xx元/天。
2510 0
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
9542 0
Python爬虫入门教程 31-100 36氪(36kr)数据抓取 scrapy
1. 36氪(36kr)数据----写在前面 今天抓取一个新闻媒体,36kr的文章内容,也是为后面的数据分析做相应的准备的,预计在12月底,爬虫大概写到50篇案例的时刻,将会迎来一个新的内容,系统的数据分析博文,记得关注哦~ 36kr 让一部分人先看到未来,而你今天要做的事情确实要抓取它的过去。
9312 0
Python爬虫入门教程 28-100 虎嗅网文章数据抓取 pyspider
1. 虎嗅网文章数据----写在前面 今天继续使用pyspider爬取数据,很不幸,虎嗅资讯网被我选中了,网址为 https://www.huxiu.com/ 爬的就是它的资讯频道,本文章仅供学习交流使用,切勿用作其他用途。
1129 0
python爬虫AJAX数据爬取和HTTPS访问 | python爬虫实战之四
本节介绍了通过“豆瓣电影”来进行了json数据的处理,另外说明了HTTPS访问需要获得CA证书。使用HTTPS加密数据更加安全。
1402 0
21、 Python快速开发分布式搜索引擎Scrapy精讲—爬虫数据保存
转: 【http://bdy.lqkweb.com】 【http://www.swpan.cn】 注意:数据保存的操作都是在pipelines.py文件里操作的 将数据保存为json文件 spider是一个信号检测 # -*- coding: utf-8 -*- # Define your it.
1027 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
13244 0
一篇文章教会你理解Scrapy网络爬虫框架的工作原理和数据采集过程
今天小编给大家详细的讲解一下Scrapy爬虫框架,希望对大家的学习有帮助。 1、Scrapy爬虫框架 Scrapy是一个使用Python编程语言编写的爬虫框架,任何人都可以根据自己的需求进行修改,并且使用起来非常的方便。
1243 0
Python爬虫入门教程 37-100 云沃客项目外包网数据爬虫 scrapy
爬前叨叨 2019年开始了,今年计划写一整年的博客呢~,第一篇博客写一下 一个外包网站的爬虫,万一你从这个外包网站弄点外快呢,呵呵哒 数据分析 官方网址为 https://www.clouderwork.
757 0
+关注
fesoncn
Python爬虫,翻译,摄影
18
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载