对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中的__new__()方法的使用
Apr 09 Python
PyQt4实现下拉菜单可供选择并打印出来
Apr 20 Python
python的pip安装以及使用教程
Sep 18 Python
Python机器学习之scikit-learn库中KNN算法的封装与使用方法
Dec 14 Python
python实现Dijkstra静态寻路算法
Jan 17 Python
Python3几个常见问题的处理方法
Feb 26 Python
Python实现的登录验证系统完整案例【基于搭建的MVC框架】
Apr 12 Python
如何基于Python爬取隐秘的角落评论
Jul 02 Python
8种常用的Python工具
Aug 05 Python
python 自定义异常和主动抛出异常(raise)的操作
Dec 11 Python
matplotlib事件处理基础(事件绑定、事件属性)
Feb 03 Python
python实现会员信息管理系统(List)
Mar 18 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 debug 安装技巧
2011/04/30 PHP
七款最流行的PHP本地服务器分享
2013/02/19 PHP
php中return的用法实例分析
2015/02/28 PHP
thinkPHP导出csv文件及用表格输出excel的方法
2015/12/30 PHP
PhpStorm配置Xdebug调试的方法步骤
2019/02/02 PHP
国外的为初学者写的JavaScript教程
2008/06/09 Javascript
jQuery创建插件的代码分析
2011/04/14 Javascript
DWZ table的原生分页浅谈
2013/03/01 Javascript
jquery的ajax请求全面了解
2013/03/20 Javascript
js特效,页面下雪的小例子
2013/06/17 Javascript
js中继承的几种用法总结(apply,call,prototype)
2013/12/26 Javascript
回车直接实现点击某按钮的效果即触发单击事件
2014/02/27 Javascript
canvas绘图不清晰的解决方案
2017/02/28 Javascript
详解前后端分离之VueJS前端
2017/05/24 Javascript
Angular.js组件之input mask对input输入进行格式化详解
2017/07/10 Javascript
推荐VSCode 上特别好用的 Vue 插件之vetur
2017/09/14 Javascript
VUE长按事件需求详解
2017/10/18 Javascript
tween.js缓动补间动画算法示例
2018/02/13 Javascript
JavaScript实现的反序列化json字符串操作示例
2018/07/18 Javascript
记一次用vue做的活动页的方法步骤
2019/04/11 Javascript
JS如何判断对象是否包含某个属性
2020/08/29 Javascript
python使用xlrd模块读写Excel文件的方法
2015/05/06 Python
python实现报表自动化详解
2017/11/16 Python
pyqt5利用pyqtDesigner实现登录界面
2019/03/28 Python
Python2与Python3的区别详解
2020/02/09 Python
python 多线程中join()的作用
2020/10/29 Python
Wilson体育用品官网:美国著名运动器材品牌
2019/05/12 全球购物
天逸系统(武汉)有限公司Java笔试题
2015/12/29 面试题
党员思想汇报范文
2013/12/30 职场文书
珍珠奶茶店创业计划书
2014/01/11 职场文书
优秀学生获奖感言
2014/02/15 职场文书
酒店总经理岗位职责
2014/03/17 职场文书
2015幼儿园新学期寄语
2015/02/27 职场文书
公司晚宴祝酒词
2015/08/11 职场文书
56句经典英文座右铭
2019/08/09 职场文书
MySQL索引是啥?不懂就问
2021/07/21 MySQL