zoukankan      html  css  js  c++  java
  • 携程数据清洗

    携程数据清洗

    数据集

    导入模块

    from pandas import DataFrame,Series
    import pandas as pd
    import numpy as np
    # FuzzyWuzzy 简单易用的字符串模糊匹配工具
    from fuzzywuzzy import process
    from fuzzywuzzy import fuzz
    

    读取数据

    df=pd.read_csv('携程/携程旅游数据.csv',names=['信息','旅游方式','出发地','供应商','公司','评分','出游人数','点评','价格','标签'])
    
    df.info()
    
    df.head(1)
    

    image-20201023215119193

    # 删除旅游方式 和 出发地 列
    df=df.drop(['旅游方式','出发地'],axis=1)
    df.head(2)
    

    image-20201023215209393

    # 删除重复项
    df.drop_duplicates(inplace=True)
    
    # 查看 去重后还有多少条数据
    df.shape
    

    (7311, 8)

    # 删除所有为 nan 的行
    df.dropna(inplace=True)
    
    # 查看  删除空值后还有多少条数据
    df.shape
    

    (7179, 8)

    # 重置索引
    df.reset_index(inplace=True)
    
    df.info()
    

    image-20201023215504407

    # 从 信息 列中 提取条件 生成新的一列
    df['条件']=df['信息'].apply(lambda x :x.split('·')).apply(lambda x:x[0])
    df.head(2)
    

    image-20201023215550590

    # 从条件列中提取 地点 生成新的一列
    df['地点']=df['条件'].str.extract(('(.*?)d+')).astype('str')
    df.head(2)
    

    image-20201023215619332

    # 将地点列中的 + 去掉
    df['地点']=df['地点'].apply(lambda x:x.split('+'))
    
    # 将条件中的日期提取出来 x日x晚 生成新列 游玩时间
    df['游玩时间']=df['条件'].str.extract(('(d+日d+晚)'))
    
    # 将条件中的 出游方式 例如:跟团游 提取出来 生成新列 [-3:] : 从倒数第三个字符开始向后提取数据
    df['游玩方式']=df['条件'].apply(lambda x:x[-3:])
    df.head(2)
    

    image-20201023215728267

    # 对供应商中的字段进行提取
    df['供应商']=df['供应商'].apply(lambda x:x.split(':')[1].split(',')[0])
    df.head(2)
    

    image-20201023215828451

    # 对评分字段进行处理 先查看有无特别的数据   df['评分'].value_counts()
    # 将 评分中 分 去掉 并把数据类型 转换为 float类型
    df['评分']=df['评分'].apply(lambda x:x.split('分')[0]).astype('float')
    
    # 对出游人数字段进行处理
    # 处理 带万人数 * 100000
    def replace_d(x):
        result=[]
        for i in x:
            b=i.split('万')
            if b[-1]=='':
                result.append(float(b[0])*10000)
            else :
                result.append(b[0])
        return result
    
    df['出游人数']=df['出游人数'].apply(lambda x:'累计0人出游' if '分' in x else x)
    
    df['出游人数']=df['出游人数'].str.extract(('(d+.d+万|d+)')).astype('str')
    df['出游人数']=replace_d(df['出游人数'])
    df['出游人数']=df['出游人数'].astype('int')
    
    # 点评数量字段处理
    df['点评']=df['点评'].apply(lambda x:x.split('条点评')[0]).apply(int)
    
    # 对价格字段进行处理
    # 将 实时计价 替换为0 
    df['价格']=df['价格'].str.replace('实时计价','0')
    # 将价格中 的数字提取出来
    df['价格']=df['价格'].str.extract(('¥(d+)')).astype('float')
    # 将价格中的 空值 替换为平均值
    df['价格']=df['价格'].fillna(df['价格'].mean())
    
    # 对标签字段进行处理
    df['标签']=df['标签'].apply(eval)
    
    # 游玩时间处理 处理空值 填充前一个值
    df['游玩时间']=df['游玩时间'].fillna(method='ffill')
    
    # 删除无用列
    df=df.drop(['信息','条件'],axis=1)
    
    # 删除全部含有Nan 的行
    df=df.dropna(axis=0,how='any')
    # 重置索引
    df.reset_index(drop=True)
    
    # 将清洗完后的数据保存
    df.to_csv('携程/清洗(完)携程旅游数据.csv')
    
  • 相关阅读:
    exciting和excited的具体用法怎么区分
    有理数的简算
    is和do的区别
    五则运算计算规则
    家庭小账本
    等差数列和等比数列(快速求存储年份)
    python argparse命令行参数
    Linux Anaconda安装步骤
    Python用MySQLdb, pymssql 模块通过sshtunnel连接远程数据库
    tornado调用ioloop TracebackFuture实现非堵塞的模块
  • 原文地址:https://www.cnblogs.com/James-221/p/13866514.html
Copyright © 2011-2022 走看看