栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

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

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

Pandas数据清理及特征处理
  • 1 缺失值观察及处理
    • 1.1 缺失值观测
    • 1.2缺失值处理
  • 2 重复观察与处理
    • 2.1 查看重复值
    • 2.2 重复值处理
  • 3特征观察与处理
    • 3.1 对数值进行离散化处理
    • 3.2 对文本进行查看
    • 3.3 #将类别文本进行转换

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  //结果:(183,12) 原有行列(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个年龄段,分别用 1,2,3,4,5分类表示
df['AgeBand'] = pd.cut(df['Age'], 5,labels = [1,2,3,4,5])

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

//方式三
//'Age'列按10% 30% 50 70% 90%五个年龄段,分别用 1,2,3,4,5分类表示
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)
//提取.之前的字母

暑期编程PK赛 得CSDN机械键盘等精美礼品!
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1015604.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号