对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实现分析apache和nginx日志文件并输出访客ip列表的方法
Apr 04 Python
Python多线程编程(二):启动线程的两种方法
Apr 05 Python
详解在Python程序中自定义异常的方法
Oct 16 Python
十条建议帮你提高Python编程效率
Feb 16 Python
python实现的多线程端口扫描功能示例
Jan 21 Python
python如何为被装饰的函数保留元数据
Mar 21 Python
python购物车程序简单代码
Apr 18 Python
对Python多线程读写文件加锁的实例详解
Jan 14 Python
pycharm+PyQt5+python最新开发环境配置(踩坑)
Feb 11 Python
Python3.5实现的三级菜单功能示例
Mar 25 Python
十分钟搞定pandas(入门教程)
Jun 21 Python
python开发人人对战的五子棋小游戏
May 02 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
短波收音机简介
2021/03/01 无线电
Apache, PHP在Windows 9x/NT下的安装与配置 (一)
2006/10/09 PHP
详解PHP的Yii框架的运行机制及其路由功能
2016/03/17 PHP
Yii2中datetime类的使用
2016/12/17 PHP
prototype1.4中文手册
2006/09/22 Javascript
基于JQuery的一个简单的鼠标跟随提示效果
2010/09/23 Javascript
js模拟hashtable的简单实例
2014/03/06 Javascript
jquery mobile页面跳转后样式丢失js失效的解决方法
2014/09/06 Javascript
javascript实现校验文件上传控件实例
2015/04/20 Javascript
JavaScript中数组的22种方法必学(推荐)
2016/07/20 Javascript
利用JS实现点击按钮后图片自动切换的简单方法
2016/10/24 Javascript
vue select组件的使用与禁用实现代码
2018/04/10 Javascript
微信小程序swiper左右扩展各显示一半代码实例
2019/12/05 Javascript
js判断鼠标移入移出方向的方法
2020/06/24 Javascript
vue如何在项目中调用腾讯云的滑动验证码
2020/07/15 Javascript
Js利用正则表达式去除字符串的中括号
2020/11/23 Javascript
[08:29]DOTA2每周TOP10 精彩击杀集锦vol.7
2014/06/25 DOTA
[00:20]TI9观赛名额抽取Ⅱ
2019/07/24 DOTA
使用python检测手机QQ在线状态的脚本代码
2013/02/10 Python
win7上python2.7连接mysql数据库的方法
2017/01/14 Python
flask使用session保存登录状态及拦截未登录请求代码
2018/01/19 Python
python在每个字符后添加空格的实例
2018/05/07 Python
浅谈PYTHON 关于文件的操作
2019/03/19 Python
Python实现PyPDF2处理PDF文件的方法示例
2019/09/25 Python
使用Django搭建网站实现商品分页功能
2020/05/22 Python
Html5 webview元素定位工具的实现
2020/08/07 HTML / CSS
全球最大的生存食品、水和装备专用在线市场:BePrepared.com
2020/01/02 全球购物
机关办公室岗位职责
2014/04/16 职场文书
副校长竞聘演讲稿
2014/09/01 职场文书
计算机实训报告总结
2014/11/05 职场文书
英语教师个人总结
2015/02/09 职场文书
中学感恩教育活动总结
2015/05/05 职场文书
幼儿教师远程研修感悟
2015/11/18 职场文书
《当代神农氏》教学反思
2016/02/23 职场文书
关于python爬虫应用urllib库作用分析
2021/09/04 Python
详解Go语言中配置文件使用与日志配置
2022/06/01 Golang