对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 获取 Linux 系统信息的代码
Jul 13 Python
说一说Python logging
Apr 15 Python
Python使用poplib模块和smtplib模块收发电子邮件的教程
Jul 02 Python
python dict 字典 以及 赋值 引用的一些实例(详解)
Jan 20 Python
python OpenCV学习笔记之绘制直方图的方法
Feb 08 Python
Python实现的连接mssql数据库操作示例
Aug 17 Python
Python wxPython库消息对话框MessageDialog用法示例
Sep 03 Python
python 高效去重复 支持GB级别大文件的示例代码
Nov 08 Python
python opencv摄像头的简单应用
Jun 06 Python
python函数装饰器之带参数的函数和带参数的装饰器用法示例
Nov 06 Python
Python如何实现小程序 无限求和平均
Feb 18 Python
Python中的面向接口编程示例详解
Jan 17 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实现设计模式中的单例模式详解
2014/10/11 PHP
php $_SESSION会员登录实例分享
2021/01/19 PHP
thinkPHP引入类的方法详解
2016/12/08 PHP
PHP自动生成缩略图函数的源码示例
2019/03/18 PHP
php+js实现的无刷新下载文件功能示例
2019/08/23 PHP
懒就要懒到底——鼠标自动点击(含时间判断)
2007/02/20 Javascript
指定js可访问其它域名的cookie的方法
2007/09/18 Javascript
比较简单的一个符合web标准的JS调用flash方法
2007/11/29 Javascript
javascript DOM编程实例(智播客学习)
2009/11/23 Javascript
from表单多个按钮提交用onclick跳转不同action
2014/04/24 Javascript
jQuery团购倒计时特效实现方法
2015/05/07 Javascript
在JS中操作时间之getUTCMilliseconds()方法的使用
2015/06/10 Javascript
jQuery实现的选择商品飞入文本框动画效果完整实例
2016/08/10 Javascript
JavaScript实现url参数转成json形式
2016/09/25 Javascript
微信小程序开发之数据存储 参数传递 数据缓存
2017/04/13 Javascript
vue如何获取点击事件源的方法
2017/08/10 Javascript
nodejs之koa2请求示例(GET,POST)
2018/08/07 NodeJs
JavaScript实现的前端AES加密解密功能【基于CryptoJS】
2018/08/28 Javascript
微信小程序传值以及获取值方法的详解
2019/04/29 Javascript
实例详解带参数的 npm script
2019/05/28 Javascript
使用python获取CPU和内存信息的思路与实现(linux系统)
2014/01/03 Python
Python的设计模式编程入门指南
2015/04/02 Python
Python实现替换文件中指定内容的方法
2018/03/19 Python
神经网络(BP)算法Python实现及应用
2018/04/16 Python
解决Python列表字符不区分大小写的问题
2019/12/19 Python
python实现将json多行数据传入到mysql中使用
2019/12/31 Python
CSS3动画之利用requestAnimationFrame触发重新播放功能
2019/09/11 HTML / CSS
HTML5的结构和语义(5):交互
2008/10/17 HTML / CSS
NARS化妆品官方商店:美国彩妆品牌
2017/08/26 全球购物
电脑销售顾问自荐信
2014/01/29 职场文书
《罗布泊,消逝的仙湖》教学反思
2014/03/01 职场文书
模具专业自荐信
2014/05/29 职场文书
租房协议书样本
2014/08/20 职场文书
无刑事犯罪记录证明
2014/09/18 职场文书
离开雷锋的日子观后感
2015/06/09 职场文书
JavaScript实现简单计时器
2021/06/22 Javascript