使用pandas清洗携程旅游数据

  • 时间:
  • 来源:互联网
  • 文章标签:

1、导入模块

from pandas import DataFrame,Series
import pandas as pd
import numpy as np
from fuzzywuzzy import process
from fuzzywuzzy import fuzz

2、读取数据

data=pd.read_csv('携程旅游数据.csv',header=None,names=['信息简介','旅游方式','出发地点','供应商','公司','评分','出游人数','点评','价格','标签'])
data

在这里插入图片描述

3、查看数据

发现出游人数中数据少了

data.info()

在这里插入图片描述

4、删除无用字段

#删除无用字段
data=data.drop(['旅游方式','出发地点'],axis=1)
data

在这里插入图片描述

5、去除重复项,删除空行,重置索引

data.drop_duplicates(inplace=True) #在原有的基础上去除重复项
data=data.dropna(axis=0,how='any') #删除全部含有空的行
data=data.reset_index(drop=True) #重置索引
data.info()

在这里插入图片描述

6、清洗信息简介字段

data['条件']=data['信息简介'].apply(lambda x:x.split('·')[0]) #以·为分割线提取条件
data['地点']=data['条件'].str.extract(('(.*?)\d+.*?')).astype('str')
data['地点']=data['地点'].apply(lambda x:x.split('+'))
data['游玩时间']=data['条件'].str.extract(('.*?(\d+日\d+晚).*?'))
data['出游方式']=data['条件'].apply(lambda x:x[-3:])
data

在这里插入图片描述

7、清洗供应商字段

#供应商字段处理,冒号是中文的
data['供应商']=data['供应商'].apply(lambda x:x.split(':')[1])
# df['评分'].value_counts() ##第一步分组查找脏数据 未发现
data['评分']=data['评分'].apply(lambda x:x.split('分')[0]).astype('float')

8、清洗出游字段

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
data['出游人数']=data['出游人数'].apply(lambda x: '累计0人出游' if '分' in  x else x)
# for i in df['出游人数'].value_counts().index: ##查找脏数据 找到评分在本列
#     print(i)
data['出游人数']=data['出游人数'].str.extract(('(\d+.\d+万|\d+)')).astype('str')
data['出游人数']=replace_d(data['出游人数'])
data['出游人数']=data['出游人数'].astype('int') 

在这里插入图片描述

9、处理点评和价格字段

data['点评']=data['点评'].apply(lambda x:x.split('条点评')[0]).apply(int) 
data['价格']=data['价格'].str.replace('实时计价','0') #调用 取消实时计价 替换乘平均值
data['价格']=data['价格'].str.extract(('¥(\d+)')).astype('float')
data['价格']=data['价格'].fillna(data['价格'].mean()) #替换NaN 为平均值
data

在这里插入图片描述

10、处理标签中的数据

data['标签']=data['标签'].apply(eval)
data

在这里插入图片描述

11、填充游玩时间中的空值

#处理空值  填充前一个值
data['游玩时间']=data['游玩时间'].fillna(method='ffill')
data

12、删除信息简介和条件字段

data=data.drop(['信息简介','条件'],axis=1)

13、删除大有Nan的全部行,并重置索引

data=data.dropna(axis=0,how='any') #删除全部含有NaN的行
data.reset_index(drop=True) #重置索引

在这里插入图片描述

本文链接http://www.taodudu.cc/news/show-1782128.html