对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的Tornado框架实现数据可视化的教程
May 02 Python
python中list列表的高级函数
May 17 Python
Python实现简单的获取图片爬虫功能示例
Jul 12 Python
python编程使用selenium模拟登陆淘宝实例代码
Jan 25 Python
django 通过ajax完成邮箱用户注册、激活账号的方法
Apr 17 Python
python抓取需要扫微信登陆页面
Apr 29 Python
对Python中TKinter模块中的Label组件实例详解
Jun 14 Python
Laravel框架表单验证格式化输出的方法
Sep 25 Python
python实现提取COCO,VOC数据集中特定的类
Mar 10 Python
Python基于Socket实现简易多人聊天室的示例代码
Nov 29 Python
python学习之使用Matplotlib画实时的动态折线图的示例代码
Feb 25 Python
python 使用pandas读取csv文件的方法
Dec 24 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小偷的核心程序
2007/04/09 PHP
有关JSON以及JSON在PHP中的应用
2010/04/09 PHP
php生成zip文件类实例
2015/04/07 PHP
PHP实现长文章分页实例代码(附源码)
2016/02/03 PHP
PHP查询并删除数据库多列重复数据的方法(利用数组函数实现)
2016/02/23 PHP
thinkPHP统计排行与分页显示功能示例
2016/12/02 PHP
Laravel学习教程之View模块详解
2017/09/18 PHP
juqery 学习之三 选择器 简单 内容
2010/11/25 Javascript
解析John Resig Simple JavaScript Inheritance代码
2012/12/03 Javascript
setTimeout自动触发一个js的方法
2014/01/15 Javascript
JS实现超过长度限制后自动跳转下一款文本框的方法
2015/02/23 Javascript
JS实现双击编辑可修改状态的方法
2015/08/14 Javascript
jQuery实现类似标签风格的导航菜单效果代码
2015/08/25 Javascript
jquery实现全选和全不选功能效果的实现代码【推荐】
2016/05/05 Javascript
nodejs mysql 实现分页的方法
2017/06/06 NodeJs
如何将 jQuery 从你的 Bootstrap 项目中移除(取而代之使用Vue.js)
2017/07/17 jQuery
关于vue-router的beforeEach无限循环的问题解决
2017/09/09 Javascript
解决angularjs WdatePicker ng-model的问题
2018/09/13 Javascript
详解vue服务端渲染浏览器端缓存(keep-alive)
2018/10/12 Javascript
浅谈Vue页面级缓存解决方案feb-alive(上)
2019/04/14 Javascript
JQuery样式与属性设置方法分析
2019/12/07 jQuery
element-ui 弹窗组件封装的步骤
2021/01/22 Javascript
Nest.js 授权验证的方法示例
2021/02/22 Javascript
Python将json文件写入ES数据库的方法
2019/04/10 Python
Python交互环境下打印和输入函数的实例内容
2020/02/16 Python
django中的数据库迁移的实现
2020/03/16 Python
解决Ubuntu18中的pycharm不能调用tensorflow-gpu的问题
2020/09/17 Python
canvas像素点操作之视频绿幕抠图
2018/09/11 HTML / CSS
英国著名的药妆网站:Escentual
2016/07/29 全球购物
阿联酋团购网站:Groupon阿联酋
2016/10/14 全球购物
村党支部公开承诺书
2014/05/29 职场文书
实习护士自荐信
2014/06/21 职场文书
三八红旗手事迹材料
2014/12/26 职场文书
2015年检察院个人工作总结
2015/05/20 职场文书
24年收藏2000多部退役军用电台
2022/02/18 无线电
代码复现python目标检测yolo3详解预测
2022/05/06 Python