1、导入相关的依赖包
import pandas as pd import numpy as np
2、读取数据
df = pd.read_csv(‘./input/qunar_freetrip.csv’, index_col=0)
- index_col 默认值(index_col = None)——重新设置一列成为index值
- index_col=False——重新设置一列成为index值
- index_col=0——第一列为index值
df.head()
3、数据的探索与描述
df.shape # 表示有0-5100行,0-13列
df.info()
#describe()函数只能显示数值型的数据统计,所以在这里只显示了2列 df.describe()
4、数据简单的处理
(1)列入将表中属性中的不规范定义进行简单的处理,例如:’价格 ‘出现空格
df.columns
将数组里的下标赋值给col变量
col = df.columns.values
去空格,第一种:以下的方法只能每次去除一次空格,有点繁琐
col[0].strip()
去空格,第二种:使用for循环来进行处理,如下:
df.columns = [x.strip() for x in col]
df.columns.values
5、重复数据的处理
(1)duplicated():显示重复值;返回布尔值类型 (2)drop_duplicates():删除重复值
df.duplicated()
df.duplicated().sum()
显示重复值的数据
df[df.duplicated()]
删除表中的重复值的数据
df.drop_duplicates(inplace=True)
df.duplicated().sum()
df.shape
我们发现重复的值已经被删除了,原来的数据是(5100,13)
现在我们要在原来的数据上,去重新将索引更改为有序
df.shape[0]
df.shape[1]
df.index #明显索引是无序的
排排序
df.index = range(df.shape[0])
df df.index
6、异常值的处理
在这里我们对“价格”和“节省”中出现的异常值进行处理 (1)对于建模来说,通常会删除异常值 (2)对于业务来说,异常值可能会包含很多的价值 (3)认为超过3倍标准差的数据,就认为这个数据是异常的
df.describe().T
明显发现max出现一个异常值179500.0
sta = (df[‘价格’] - df[‘价格’].mean())/df[‘价格’].std()
df[sta.abs()>3]
df[df.节省 > df.价格]
发现异常值一共有4条
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)
df.shape
7、缺失值的处理
(1)df.isnull() 查看缺失值 (2)df.notnull() 查看不是缺失值 (3)df.dropnd() 删除缺失值 (4)df.fillna() 填补缺失值
df.isnull().sum()
df[df.出发地.isnull()]
df.loc[df.出发地.isnull(), ‘出发地’] = [str(x)[:2] for x in df.loc[df.出发地.isnull(),’路线名’]]
df[df.出发地.isnull()]
df.出发地.isnull().sum()
df[df.目的地.isnull()]
df.loc[df.目的地.isnull(), ‘目的地’] = str(df.loc[df.目的地.isnull(), ‘路线名’].values)[5:7]
df[‘价格’].fillna(round(df[‘价格’].mean(), 0), inplace= True)
df[‘节省’].fillna(round(df[‘节省’].mean(), 0), inplace = True)
在python3中round()函数做个改动,而且让人很难接受,所以现在用python2和python3来求round(2.5)会有不同的结果。python2给出的结果更接近大家通常的认识,下面是python2和3对round()函数的处理:
round(x)函数将一个浮点数x四舍五入为最近的1的倍数,如round(0.4)=0, round(0.6)=1.0; 如果x距离两个倍数值相等,如round(0.5)距离0和1.0相等,那么: python2把x四舍五入为远离0的最近倍数,如round(0.5)=1, round(-0.5)=-1; python3则会把x四舍五入为最近的偶数倍数,如round(0.5)=0, round(1.5)=2.0, round(2.5)=2.0
df.isnull().sum()
8、处理文本行数据
如果想要在一系列文本提取信息,使用正则表达式
df[‘酒店评分’] = df.酒店.str.extract(‘(\d.\d)分/5分’, expand=False) df[‘酒店等级’] = df.酒店.str.extract(‘ (.+ )’, expand=False) df[‘天数’] = df.路线名.str.extract(‘(\d+)天\d晚’, expand=False)
df.head(2)
【Me】https://github.com/Valuebai/
【参考】 1、出处:https://www.kesci.com/home/project/5cbd32248c90d7002c816fa0/code