对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 中文字符串的处理实现代码
Oct 25 Python
Python入门篇之列表和元组
Oct 17 Python
Python中join和split用法实例
Apr 14 Python
pymongo实现多结果进行多列排序的方法
May 16 Python
Python简单实现enum功能的方法
Apr 25 Python
Python3解决棋盘覆盖问题的方法示例
Dec 07 Python
tensorflow建立一个简单的神经网络的方法
Feb 10 Python
Pyspider中给爬虫伪造随机请求头的实例
May 07 Python
使用Python 统计高频字数的方法
Jan 31 Python
python实现小世界网络生成
Nov 21 Python
python实现全排列代码(回溯、深度优先搜索)
Feb 26 Python
Python WSGI 规范简介
Apr 11 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新手上路(十一)
2006/10/09 PHP
smarty半小时快速上手入门教程
2014/10/27 PHP
PHP MVC框架路由学习笔记
2016/03/02 PHP
php数组函数array_walk用法示例
2016/05/26 PHP
php获取POST数据的三种方法实例详解
2016/12/20 PHP
PHP应用跨时区功能的实现方法
2019/03/21 PHP
javascript中String类的subString()方法和slice()方法
2011/05/24 Javascript
jQuery过滤选择器:not()方法使用介绍
2014/04/20 Javascript
JavaScript实战之带收放动画效果的导航菜单
2016/08/16 Javascript
基于Node.js + WebSocket打造即时聊天程序嗨聊
2016/11/29 Javascript
非常优秀的JS图片轮播插件Swiper的用法
2017/01/03 Javascript
javascript闭包功能与用法实例分析
2017/04/06 Javascript
js时间查询插件使用详解
2017/04/07 Javascript
详解使用vue脚手架工具搭建vue-webpack项目
2017/05/10 Javascript
ES6 javascript中class类的get与set用法实例分析
2017/10/30 Javascript
js推箱子小游戏步骤代码解析
2018/01/10 Javascript
JavaScript 隐性类型转换步骤浅析
2018/03/15 Javascript
深入浅析JS中的严格模式
2018/06/04 Javascript
详解Webpack4多页应用打包方案
2020/07/16 Javascript
vue 解决data中定义图片相对路径页面不显示的问题
2020/08/13 Javascript
Python实现的Kmeans++算法实例
2014/04/26 Python
通过python+selenium3实现浏览器刷简书文章阅读量
2017/12/26 Python
对numpy中的where方法嵌套使用详解
2018/10/31 Python
python使用xlrd模块读取xlsx文件中的ip方法
2019/01/11 Python
Python sklearn库实现PCA教程(以鸢尾花分类为例)
2020/02/24 Python
详解通过HTML5 Canvas实现图片的平移及旋转变化的方法
2016/03/22 HTML / CSS
size?瑞典:英国伦敦的球鞋精品店
2018/03/01 全球购物
如何设置Java的运行环境
2013/04/05 面试题
计算s=f(f(-1.4))的值
2014/05/06 面试题
商务日语毕业生自荐信
2013/11/23 职场文书
挂牌仪式策划方案
2014/05/18 职场文书
防灾减灾宣传标语
2014/10/07 职场文书
护士个人年终总结
2015/02/13 职场文书
2015财务年终工作总结范文
2015/05/22 职场文书
教师见习总结范文
2015/06/23 职场文书
Python 中的Sympy详细使用
2021/08/07 Python