对pandas进行数据预处理的实例讲解


Posted in Python onApril 20, 2018

参加kaggle数据挖掘比赛,就第一个赛题Titanic的数据,学习相关数据预处理以及模型建立,本博客关注基于pandas进行数据预处理过程。包括数据统计、数据离散化、数据关联性分析

引入包和加载数据

import pandas as pd
import numpy as np
train_df =pd.read_csv('../datas/train.csv') # train set
test_df = pd.read_csv('../datas/test.csv') # test set
combine = [train_df, test_df]

清洗数据

查看数据维度以及类型

缺失值处理

查看object数据统计信息

数值属性离散化

计算特征与target属性之间关系

查看数据维度以及类型

#查看前五条数据
print train_df.head(5) 
#查看每列数据类型以及nan情况
print train_df.info() 
# 获得所有object属性
print train_data.describe(include=['O']).columns

查看object数据统计信息

#查看连续数值属性基本统计情况
print train_df.describe() 
#查看object属性数据统计情况
print train_df.describe(include=['O']) 
# 统计Title单列各个元素对应的个数
print train_df['Title'].value_counts() 
# 属性列删除
train_df = train_df.drop(['Name', 'PassengerId'], axis=1)

缺失值处理

# 直接丢弃缺失数据列的行
print df4.dropna(axis=0,subset=['col1']) # 丢弃nan的行,subset指定查看哪几列 
print df4.dropna(axis=1) # 丢弃nan的列
# 采用其他值填充
dataset['Cabin'] = dataset['Cabin'].fillna('U') 
dataset['Title'] = dataset['Title'].fillna(0) 
# 采用出现最频繁的值填充
freq_port = train_df.Embarked.dropna().mode()[0]
dataset['Embarked'] = dataset['Embarked'].fillna(freq_port)
# 采用中位数或者平均数填充
test_df['Fare'].fillna(test_df['Fare'].dropna().median(), inplace=True)
test_df['Fare'].fillna(test_df['Fare'].dropna().mean(), inplace=True)

数值属性离散化,object属性数值化

# 创造一个新列,FareBand,将连续属性Fare切分成四份
train_df['FareBand'] = pd.qcut(train_df['Fare'], 4)
# 查看切分后的属性与target属性Survive的关系
train_df[['FareBand', 'Survived']].groupby(['FareBand'], as_index=False).mean().sort_values(by='FareBand', ascending=True)
# 建立object属性映射字典 
title_mapping = {"Mr": 1, "Miss": 2, "Mrs": 3, "Master": 4, "Royalty":5, "Officer": 6}
dataset['Title'] = dataset['Title'].map(title_mapping)

计算特征与target属性之间关系

object与连续target属性之间,可以groupby均值

object与离散target属性之间,先将target数值化,然后groupby均值,或者分别条形统计图

连续属性需要先切割然后再进行groupby计算,或者pearson相关系数

print train_df[['AgeBand', 'Survived']].groupby(['AgeBand'], as_index=False).mean().sort_values(by='AgeBand', ascending=True)

总结pandas基本操作

”' 
创建df对象 
””' 
s1 = pd.Series([1,2,3,np.nan,4,5]) 
s2 = pd.Series([np.nan,1,2,3,4,5]) 
print s1 
dates = pd.date_range(“20130101”,periods=6) 
print dates 
df = pd.DataFrame(np.random.rand(6,4),index=dates,columns=list(“ABCD”)) 
# print df 
df2 = pd.DataFrame({“A”:1, 
‘B':pd.Timestamp(‘20130102'), 
‘C':pd.Series(1,index=list(range(4)),dtype='float32'), 
‘D':np.array([3]*4,dtype=np.int32), 
‘E':pd.Categorical([‘test','train','test','train']), 
‘F':'foo' 
}) 
# print df2.dtypes
df3 = pd.DataFrame({'col1':s1,
     'col2':s2
})
print df3

'''
2.查看df数据
'''
print df3.head(2) #查看头几条
print df3.tail(3) #查看尾几条
print df.index #查看索引
print df.info() #查看非non数据条数
print type(df.values) #返回二元数组
# print df3.values
print df.describe() #对每列数据进行初步的统计
print df3
print df3.sort_values(by=['col1'],axis=0,ascending=True) #按照哪几列排序

'''
3.选择数据
'''
ser_1 = df3['col1']
print type(ser_1) #pandas.core.series.Series
print df3[0:2] #前三行
print df3.loc[df3.index[0]] #通过index来访问
print df3.loc[df3.index[0],['col2']] #通过行index,和列名来唯一确定一个位置
print df3.iloc[1] #通过位置来访问
print df3.iloc[[1,2],1:2] #通过位置来访问
print "==="
print df3.loc[:,['col1','col2']].as_matrix() # 返回nunpy二元数组
print type(df3.loc[:,['col1','col2']].as_matrix())

'''
4.布尔索引,过滤数据
'''
print df3[df3.col1 >2]
df4 = df3.copy()
df4['col3']=pd.Series(['one','two','two','three','one','two'])
print df4
print df4[df4['col3'].isin(['one','two'])]
df4.loc[:,'col3']="five"
print df4

'''
5.缺失值处理,pandas将缺失值用nan代替
'''
print pd.isnull(df4)
print df4.dropna(axis=0,subset=['col1']) # 丢弃nan的行,subset指定查看哪几列
print df4.dropna(axis=1) # 丢弃nan的列

以上这篇对pandas进行数据预处理的实例讲解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python 文件重命名工具代码
Jul 26 Python
Python程序中设置HTTP代理
Nov 06 Python
Python中工作日类库Busines Holiday的介绍与使用
Jul 06 Python
python爬虫headers设置后无效的解决方法
Oct 21 Python
python中abs&map&reduce简介
Feb 20 Python
python定时关机小脚本
Jun 20 Python
python实现基于信息增益的决策树归纳
Dec 18 Python
在django admin中添加自定义视图的例子
Jul 26 Python
Tensorflow设置显存自适应,显存比例的操作
Feb 03 Python
Python模拟伯努利试验和二项分布代码实例
May 27 Python
基于pycharm实现批量修改变量名
Jun 02 Python
python中使用 unittest.TestCase单元测试的用例详解
Aug 30 Python
pandas 两列时间相减换算为秒的方法
Apr 20 #Python
详谈pandas中agg函数和apply函数的区别
Apr 20 #Python
Python使用pip安装pySerial串口通讯模块
Apr 20 #Python
pandas apply 函数 实现多进程的示例讲解
Apr 20 #Python
python3+PyQt5图形项的自定义和交互 python3实现page Designer应用程序
Jul 20 #Python
Python查找两个有序列表中位数的方法【基于归并算法】
Apr 20 #Python
pandas 使用apply同时处理两列数据的方法
Apr 20 #Python
You might like
PHP分页函数代码(简单实用型)
2010/12/02 PHP
php缓存技术详细总结
2013/08/07 PHP
PHP+javascript制作带提示的验证码源码分享
2014/05/28 PHP
phpcms的分类名称和类别名称的调用
2017/01/05 PHP
PHP中include和require的区别实例分析
2017/05/07 PHP
利用javascript查看html源文件
2006/11/08 Javascript
用于自动添加Digg This!按钮的JavaScript
2006/12/23 Javascript
JSON 入门指南 想了解json的朋友可以看下
2009/08/26 Javascript
Extjs学习笔记之二 初识Extjs之Form
2010/01/07 Javascript
javascript中使用replaceAll()函数实现字符替换的方法
2010/12/25 Javascript
用js读、写、删除Cookie代码分享及详细注释说明
2014/06/05 Javascript
js中this用法实例详解
2015/05/05 Javascript
Vue.js学习笔记之 helloworld
2016/08/14 Javascript
JS作用域链详解
2017/06/26 Javascript
Vue中的ref作用详解(实现DOM的联动操作)
2017/08/21 Javascript
Nodejs连接mysql并实现增、删、改、查操作的方法详解
2018/01/04 NodeJs
JS实现的进制转换,浮点数相加,数字判断操作示例
2019/11/09 Javascript
[01:05:32]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#1COL VS Alliance第一局
2016/03/04 DOTA
wxpython 学习笔记 第一天
2009/02/09 Python
机器学习10大经典算法详解
2017/12/07 Python
win10系统下Anaconda3安装配置方法图文教程
2018/09/19 Python
python虚拟环境的安装和配置(virtualenv,virtualenvwrapper)
2019/08/09 Python
jupyter notebook插入本地图片的实现
2020/04/13 Python
python 偷懒技巧——使用 keyboard 录制键盘事件
2020/09/21 Python
Pyecharts 中Geo函数常用参数的用法说明
2021/02/01 Python
Reformation官网:美国女装品牌
2018/09/14 全球购物
争论的故事教学反思
2014/02/06 职场文书
股份合作协议书范本
2014/04/14 职场文书
竞选部长演讲稿
2014/04/26 职场文书
超市周年庆活动方案
2014/08/16 职场文书
机关党建工作汇报材料
2014/08/20 职场文书
幼儿园小班个人总结
2015/02/12 职场文书
python生成随机数、随机字符、随机字符串
2021/04/06 Python
压缩Redis里的字符串大对象操作
2021/06/23 Redis
redis击穿 雪崩 穿透超详细解决方案梳理
2022/03/17 Redis
MySQL范围查询优化的场景实例详解
2022/06/10 MySQL