【Pandas数据清理及特征处理】

1 缺失值观察及处理

1.1 缺失值观测

数据集下载 链接: https://www.kaggle.com/c/titanic/overview

//方法一
df.info()

在这里插入图片描述上述 观察到 ‘Age’,'Cabin‘,'Embarked’列分别是 714,204,889 不是空的(not-null),但总列数为891,因此这三列是 NaN

//方法二
//使用isnull()方法,查看‘NaN’的个数
df.isnull().sum()

在这里插入图片描述

1.2缺失值处理

注意:以下两种使得'Age'列为Nan值的一行全为0,当进行重复值处理时会有较多的重复数据。
//方式一
df[df['Age'].isnull()] = 0 
//方式二
df[np.isnan(df['Age'])] = 0
//方式三
df = df.dropna()
df.shape  //结果:(18312) 原有行列(891,12//直接把有空缺值的行全部删除
//方式四
//df.fillna(0).head(3)
df.shape  //结果:(891,12//把空缺值填充为0

2 重复观察与处理

2.1 查看重复值

采用缺失值处理前两种方式,会有较多重复值
df[df.duplicated()]

在这里插入图片描述

2.2 重复值处理

df = df.drop_duplicates()

3特征观察与处理

3.1 对数值进行离散化处理

//方式一,'Age'列分成5个年龄段,分别用 12345分类表示
df['AgeBand'] = pd.cut(df['Age'], 5,labels = [1,2,3,4,5])

//方式二:
//'Age'列划分为(0,5] (5,15] (15,30] (30,50] (50,80]五个年龄段,分别用 12345分类表示
df['AgeBand'] = pd.cut(df['Age'],[0,5,15,30,50,80],labels = [1,2,3,4,5])

//方式三
//'Age'列按10% 30% 50 70% 90%五个年龄段,分别用 12345分类表示
df['AgeBand'] = pd.qcut(df['Age'],[0,0.1,0.3,0.5,0.7,0.9],labels = [1,2,3,4,5])

3.2 对文本进行查看

//查看类别文本变量名及种类

//方法一: value_counts
df['Sex'].value_counts()


//输出:类别:‘male’,‘female’
male      577
female    314
Name: Sex, dtype: int64
#方法二: unique
df['Sex'].unique() //输出:array(['male', 'female'], dtype=object)
df['Sex'].nunique()//输出:2 //表示2个类别

3.3 #将类别文本进行转换

//方法一: replace   将性别male转为1 ,female转为2
df['Sex_num'] = df['Sex'].replace(['male','female'],[1,2])

//方法二: map
df['Sex_num'] = df['Sex'].map({'male': 1, 'female': 2})
//方法三: 使用sklearn.preprocessing的LabelEncoder

from sklearn.preprocessing import LabelEncoder
for feat in ['Cabin', 'Ticket']:
    lbl = LabelEncoder()  
    label_dict = dict(zip(df[feat].unique(), range(df[feat].nunique())))
    df[feat + "_labelEncode"] = df[feat].map(label_dict)
    df[feat + "_labelEncode"] = lbl.fit_transform(df[feat].astype(str))

//zip():将df[feat].unique()range(df[feat].nunique() 对应元素转为元组列表
//dict():转为字典
//df[feat].map :按照字典类型进行文本转换
//fit(y) :fit看做一本空字典,y可看作要塞到字典中的词
//fit_transform(y):相当于先进行fit再进行transform,即把y塞到字典中去以后再进行transform得到索引值

在这里插入图片描述

//将类别文本转换为one-hot编码
// OneHotEncoder
for feat in ["Age", "Embarked"]:
#     x = pd.get_dummies(df["Age"] // 6)
#     x = pd.get_dummies(pd.cut(df['Age'],5))
    x = pd.get_dummies(df[feat], prefix=feat)//进行编码
    df = pd.concat([df, x], axis=1)//合并列
    #df[feat] = pd.get_dummies(df[feat], prefix=feat)
 

在这里插入图片描述

//从纯文本Name特征里提取出Titles的特征(所谓的Titles就是Mr,Miss,Mrs等)
df['Title'] = df.Name.str.extract('([A-Za-z]+)\.', expand=False)
//提取.之前的字母

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值