爬虫练习之数据清洗——基于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
目录
相关文章
|
7月前
|
数据采集 Python
如何在Python中使用Pandas库进行数据清洗?
Pandas在Python中提供高效的数据清洗功能,包括处理缺失值(`dropna()`删除、`fillna()`填充)、重复值(`duplicated()`检查、`drop_duplicates()`删除)、异常值(条件筛选、分位数、标准差)和文本数据(字符串操作、正则表达式)。这些方法帮助用户根据需求清洗数据,确保数据质量。
72 0
|
7月前
|
数据采集 Python
如何在Python中使用Pandas库进行数据清洗?
【4月更文挑战第21天】Pandas在Python中用于数据清洗,包括处理缺失值(`dropna()`删除、`fillna()`填充)、处理重复值(`duplicated()`检查、`drop_duplicates()`删除)、处理异常值(条件筛选、分位数、标准差)和文本数据(字符串操作、正则表达式)。示例代码展示了各种方法的用法。
100 3
|
23天前
|
数据采集 数据挖掘 数据处理
如何使用 Pandas 库进行数据清洗和预处理?
数据清洗和预处理是数据分析中至关重要的步骤,Pandas库提供了丰富的函数和方法来完成这些任务
53 8
|
3月前
|
数据采集 Python
Pandas爬虫:某浪财经机构持股汇总
Pandas爬虫:某浪财经机构持股汇总
33 1
|
3月前
|
数据采集 数据挖掘 Python
Python:pandas做爬虫
Python:pandas做爬虫
41 0
|
1月前
|
数据采集 Python
Pandas 常用函数-数据清洗
Pandas 常用函数-数据清洗
20 2
|
1月前
|
数据采集 数据挖掘 数据格式
Pandas 数据清洗
10月更文挑战第27天
42 0
Pandas 数据清洗
|
2月前
|
数据采集 数据可视化 数据挖掘
Python 数据分析实战:使用 Pandas 进行数据清洗与可视化
【10月更文挑战第3天】Python 数据分析实战:使用 Pandas 进行数据清洗与可视化
121 0
|
7月前
|
数据采集 数据挖掘 大数据
数据处理利器:使用Pandas进行数据清洗与转换
【4月更文挑战第12天】在大数据时代,Pandas是Python数据分析的关键工具,提供高效的数据清洗和转换功能。本文介绍了如何使用Pandas处理缺失值(删除或填充)、异常值(Z-Score法和IQR法)以及重复值(检测和删除)。此外,还涵盖了数据转换,包括数据类型转换、数据标准化(Min-Max和Z-Score)以及类别数据的one-hot编码。通过学习这些方法,可以为数据分析和挖掘奠定坚实基础。
193 0
|
6月前
|
数据采集 存储 数据可视化
Pandas高级教程:数据清洗、转换与分析
Pandas是Python的数据分析库,提供Series和DataFrame数据结构及数据分析工具,便于数据清洗、转换和分析。本教程涵盖Pandas在数据清洗(如缺失值、重复值和异常值处理)、转换(数据类型转换和重塑)和分析(如描述性统计、分组聚合和可视化)的应用。通过学习Pandas,用户能更高效地处理和理解数据,为数据分析任务打下基础。
748 3