携程数据清洗

携程数据清洗

数据集

导入模块

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')
原文地址:https://www.cnblogs.com/James-221/p/13866514.html