python清洗爬取的旅游网站的数据的知识点

爬取得旅游网站数据

# -*- encoding: utf-8 -*-
"""
@File    : homework_5_data_clean.py
@Time    : 2019/9/17 22:05
@Author  : chen

"""
import numpy as np
import pandas as pd

df = pd.read_csv("qunar_freetrip.csv", index_col=0)
print(df)

print(df.columns)

col = df.columns.values
print(col[0].strip())    # 去除空格

df.columns = [x.strip() for x in col]
print(df.columns.values)

# 重复值的处理
# duplicated()显示重复值,返回的是一个布尔类型的数据类型    显示为True的代表数据重复
# drop_duplicated():删除重复值

print("重复数据多少组:",df.duplicated().sum())        # 重复数据多少组
print(df.duplicated())                              # 显示重复数据

print(df.drop_duplicates(inplace=True))             # 删除重复数据
print(df.drop_duplicates().sum())

print(df.shape)
df.index = range(df.shape[0])
print(df.index)

### 异常值处理
print("########################################################")
'''
主要处理’价格‘和’节省‘两个字段

需要针对不同的项目进行处理
'''
print(df.describe())        # 只有数字类型显示
print(df.describe().T)      # 转置操作

print("价格标准差:", df["价格"].std())     # 价格标准差

print(df["价格"]-df["价格"].mean())

# 标准差标准化处理:也叫标准分数
sta = (df["价格"]-df["价格"].mean())/df["价格"].std()
print("标准差标准化处理:", sta)
#
print("*********异常数据显示************")
print(df[sta.abs() > 3])             # 查出来标准分数 >3 的异常数据

print(df[df.节省 > df.价格])          # 节省钱数大于自身价格的异常数据

print(pd.concat([df[df.节省 > df.价格], df[sta.abs() > 3]]))    # 合并上面两个异常数据

del_index = pd.concat([df[df.节省 > df.价格], df[sta.abs() > 3]]).index   # 得到异常数据的索引值
df.drop(del_index, inplace=True)                                         # 不显示为True的数据,删除异常
print(df.shape)

### 缺失值处理
print("*******************缺失值处理部分**********************")

'''
df.isnull()   查看缺失值
df.notnull()  查看不是缺失值的
df.dropnd()   删除缺失值
df.fillna()   填补缺失值
'''

print(df.isnull())
print(df.isnull().sum())
print(df[df.出发地.isnull()])                # 出发地缺失数据
print(df[df.价格.isnull()])                  # 价格缺失数据
print(df.loc[df.出发地.isnull(), '出发地'])   # 单独获取出发地为空的数据,返回出发地
print(df.loc[df.出发地.isnull(), '路线名'])   # 获取出发地为空的数据,返回路线名

df.loc[df.出发地.isnull(), '出发地'] = [str(x)[:2] for x in df.loc[df.出发地.isnull(), '路线名']]  # str(x)[:2]字符串从0到2 提取出来,即出发地的城市名称,2个汉字,赋值到出发地为空的

print("出发地为空的数据:", df[df.出发地.isnull()])  # 出发地为空的数据
print("出发地为空的数据数目是多少:",df.出发地.isnull().sum())

# 目的地异常数据的问题
print("目的地异常数据:", df[df.目的地.isnull()])
print("目的地异常数据str类型数据返回:", str(df.loc[df.目的地.isnull(), '路线名'].values))
print("目的地异常数据提取目的地名称:", str(df.loc[df.目的地.isnull(), '路线名'].values)[5:7])
df.loc[df.目的地.isnull(),"目的地"] = str(df.loc[df.目的地.isnull(), '路线名'].values)[5:7]  # 数据替换

# 处理价格
print(df["价格"].mean())
print(round(df["价格"].mean(), 0))
print(df["价格"].fillna(round(df["价格"].mean(), 0), inplace=True))
print(df["节省"].fillna(round(df["节省"].mean(), 0), inplace=True))
print("缺失数据的数目为0,代表队缺失值处理完成:", df.isnull().sum())           # 缺失数据的数目为0,代表队缺失值处理完成


# 提取酒店评分数据
df["酒店评分"] = df.酒店.str.extract('(\d\.\d)分/5分')
print(df["酒店评分"])
# 提取酒店等级
df["酒店等级"] = df.酒店.str.extract(' (.+ )')
print(df["酒店等级"])
# 提取天数
df["天数"] = df.路线名.str.extract('(\d+)天\d晚')
print(df["天数"])
print(df.head())
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值