对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字典的常用操作方法小结
May 16 Python
Python面向对象特殊成员
Apr 24 Python
Python常用内置模块之xml模块(详解)
May 23 Python
Python语言描述最大连续子序列和
Dec 05 Python
Django使用Mysql数据库已经存在的数据表方法
May 27 Python
python读取并写入mat文件的方法
Jul 12 Python
这可能是最好玩的python GUI入门实例(推荐)
Jul 19 Python
利用rest framework搭建Django API过程解析
Aug 31 Python
解决django-xadmin列表页filter关联对象搜索问题
Nov 15 Python
利用python 读写csv文件
Sep 10 Python
Python爬虫之Selenium多窗口切换的实现
Dec 04 Python
如何在Python中妥善使用进度条详解
Apr 05 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
IIS php环境配置PHP5 MySQL5 ZendOptimizer phpmyadmin安装与配置
2008/11/18 PHP
php自动加载的两种实现方法
2010/06/21 PHP
PHP7 弃用功能
2021/03/09 PHP
JavaScript面象对象设计
2008/04/28 Javascript
更换select下拉菜单背景样式的实现代码
2011/12/20 Javascript
新发现一个骗链接的方法(js读取cookies)
2012/01/11 Javascript
web基于浏览器的本地存储方法应用
2012/11/27 Javascript
AngularJS基础 ng-mouseenter 指令示例代码
2016/08/02 Javascript
JS提示:Uncaught SyntaxError:Unexpected token ) 错误的解决方法
2016/08/19 Javascript
BootStrap3中模态对话框的使用
2017/01/06 Javascript
在vue中使用Autoprefixed的方法
2018/07/27 Javascript
Vue 配合eiement动态路由,权限验证的方法
2018/09/26 Javascript
详解Vue中使用Axios拦截器
2019/04/22 Javascript
详解在Javascript中进行面向切面编程
2019/04/28 Javascript
vue+web端仿微信网页版聊天室功能
2019/04/30 Javascript
windows如何把已安装的nodejs高版本降级为低版本(图文教程)
2020/12/14 NodeJs
[00:34]TI7不朽珍藏III——地穴编织者不朽展示
2017/07/15 DOTA
python在windows和linux下获得本机本地ip地址方法小结
2015/03/20 Python
用Python的Django框架来制作一个RSS阅读器
2015/07/22 Python
python编写微信远程控制电脑的程序
2018/01/05 Python
利用python将json数据转换为csv格式的方法
2018/03/22 Python
Python3.7中安装openCV库的方法
2018/07/11 Python
python使用正则筛选信用卡
2019/01/27 Python
Python函数的参数常见分类与用法实例详解
2019/03/30 Python
简单了解python的break、continue、pass
2019/07/08 Python
使用tensorflow显示pb模型的所有网络结点方式
2020/01/23 Python
世界顶级俱乐部的官方球衣和套装:Subside Sports
2018/04/22 全球购物
犹他州最古老的体育用品公司:Al’s
2020/12/18 全球购物
说一下mysql, oracle等常见数据库的分页实现方案
2012/09/29 面试题
linux面试题参考答案(1)
2016/01/22 面试题
女大学生自我鉴定
2013/12/09 职场文书
对孩子的寄语
2014/04/09 职场文书
申论倡议书范文
2014/05/13 职场文书
婚礼家长致辞
2015/07/27 职场文书
商务宴会祝酒词
2015/08/11 职场文书
使用 CSS 构建强大且酷炫的粒子动画效果
2022/08/14 HTML / CSS