对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 相关文章推荐
使用PyInstaller将Python程序文件转换为可执行程序文件
Jul 08 Python
python中安装模块包版本冲突问题的解决
May 02 Python
Python实现提取XML内容并保存到Excel中的方法
Sep 01 Python
Python快速转换numpy数组中Nan和Inf的方法实例说明
Feb 21 Python
python学习--使用QQ邮箱发送邮件代码实例
Apr 16 Python
详解Python中的内建函数,可迭代对象,迭代器
Apr 29 Python
PyQt5图形界面播放音乐的实例
Jun 17 Python
详解Django CAS 解决方案
Oct 30 Python
利用python实现冒泡排序算法实例代码
Dec 01 Python
python 对任意数据和曲线进行拟合并求出函数表达式的三种解决方案
Feb 18 Python
python实现全排列代码(回溯、深度优先搜索)
Feb 26 Python
python 浮点数四舍五入需要注意的地方
Aug 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中base64_decode与base64_encode加密解密函数实例
2014/11/24 PHP
PHP脚本监控Nginx 502错误并自动重启php-fpm
2015/05/13 PHP
PHP简单生成缩略图相册的方法
2015/07/29 PHP
(转载)JavaScript中匿名函数,函数直接量和闭包
2007/05/08 Javascript
wordpress之js库集合研究介绍
2007/08/17 Javascript
javascript 面向对象全新理练之继承与多态
2009/12/03 Javascript
基于Jquery的简单图片切换效果
2011/01/06 Javascript
nodejs分页类代码分享
2014/06/17 NodeJs
JavaScript检测实例属性, 原型属性
2015/02/04 Javascript
js canvas实现擦除动画
2016/07/16 Javascript
vue2.0开发实践总结之疑难篇
2016/12/07 Javascript
原生javascript实现图片放大镜效果
2017/01/18 Javascript
JS 组件系列之Bootstrap Table的冻结列功能彻底解决高度问题
2017/06/30 Javascript
基于react组件之间的参数传递(详解)
2017/09/05 Javascript
AngularJS实现的2048小游戏功能【附源码下载】
2018/01/03 Javascript
js 实现在2d平面上画8的方法
2018/10/10 Javascript
jQuery实现验证用户登录
2019/12/10 jQuery
JS继承定义与使用方法简单示例
2020/02/19 Javascript
使用python获取CPU和内存信息的思路与实现(linux系统)
2014/01/03 Python
Python中生成Epoch的方法
2017/04/26 Python
Python实现一个转存纯真IP数据库的脚本分享
2017/05/21 Python
PyCharm在新窗口打开项目的方法
2019/01/17 Python
通过pycharm使用git的步骤(图文详解)
2019/06/13 Python
python使用tkinter库实现五子棋游戏
2019/06/18 Python
检测tensorflow是否使用gpu进行计算的方式
2020/02/03 Python
Python批量安装卸载1000个apk的方法
2020/04/10 Python
django model 条件过滤 queryset.filter(**condtions)用法详解
2020/05/20 Python
Html5内唤醒百度、高德APP的实现示例
2019/05/20 HTML / CSS
匡威西班牙官网:Converse西班牙
2019/10/01 全球购物
文员个人的求职信范文
2013/09/26 职场文书
技术副厂长岗位职责
2013/12/26 职场文书
2014政府领导班子对照检查材料思想汇报(3篇)
2014/09/26 职场文书
ktv服务员岗位职责
2015/02/09 职场文书
放假通知格式
2015/04/14 职场文书
nginx 添加http_stub_status_module模块
2022/05/25 Servers
Python  序列化反序列化和异常处理的问题小结
2022/12/24 Python