对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实现给字典添加条目的方法
Sep 25 Python
python和shell实现的校验IP地址合法性脚本分享
Oct 23 Python
python使用smtplib模块通过gmail实现邮件发送的方法
May 08 Python
Mac中Python 3环境下安装scrapy的方法教程
Oct 26 Python
使用numpy和PIL进行简单的图像处理方法
Jul 02 Python
Python进阶之全面解读高级特性之切片
Feb 19 Python
在Pycharm中使用GitHub的方法步骤
Jun 13 Python
python中字符串数组逆序排列方法总结
Jun 23 Python
python爬虫 模拟登录人人网过程解析
Jul 31 Python
Python面向对象之Web静态服务器
Sep 03 Python
使用python-cv2实现Harr+Adaboost人脸识别的示例
Oct 27 Python
浅谈怎么给Python添加类型标注
Jun 08 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防注入代码
2010/04/07 PHP
利用ThinkPHP内置的ThinkAjax实现异步传输技术的实现方法
2011/12/19 PHP
php+mysql查询优化简单实例
2015/01/13 PHP
php获得客户端浏览器名称及版本的方法(基于ECShop函数)
2015/12/23 PHP
PHP基于单例模式编写PDO类的方法
2016/09/13 PHP
js报错 Object doesn't support this property or method的原因分析
2011/03/31 Javascript
qq悬浮代码(兼容各个浏览器)
2014/01/29 Javascript
javascript的函数作用域
2014/11/12 Javascript
jquery制作漂亮的弹出层提示消息特效
2014/12/23 Javascript
基于jQuery+Cookie实现的防止刷新的在线考试倒计时
2015/06/19 Javascript
jQuery版AJAX简易封装代码
2016/09/14 Javascript
jQuery实现手机版页面翻页效果的简单实例
2016/10/05 Javascript
详解vue2父组件传递props异步数据到子组件的问题
2017/06/29 Javascript
Vue下拉框回显并默认选中随机问题
2018/09/06 Javascript
对Vue.js之事件的绑定(v-on: 或者 @ )详解
2018/09/15 Javascript
vue基础之事件v-onclick="函数"用法示例
2019/03/11 Javascript
JavaScript正则表达式验证登录实例
2020/03/18 Javascript
基于JavaScript实现十五拼图代码实例
2020/04/26 Javascript
JS运算符优先级与表达式示例详解
2020/09/04 Javascript
Python中Selenium模拟JQuery滑动解锁实例
2017/07/26 Python
python编写分类决策树的代码
2017/12/21 Python
TensorFlow实现MLP多层感知机模型
2018/03/09 Python
python 读入多行数据的实例
2018/04/19 Python
解决webdriver.Chrome()报错:Message:'chromedriver' executable needs to be in Path
2019/06/12 Python
使用python os模块复制文件到指定文件夹的方法
2019/08/22 Python
Windows系统下pycharm中的pip换源
2020/02/23 Python
基于Python爬取股票数据过程详解
2020/10/21 Python
python 实现批量图片识别并翻译
2020/11/02 Python
Pytorch之扩充tensor的操作
2021/03/04 Python
今天学到的CSS最新技术(与图片背景相关)
2012/12/24 HTML / CSS
Michael Kors英国官网:美国奢侈品品牌
2019/11/13 全球购物
最新自我评价范文
2013/11/16 职场文书
2015年劳动部工作总结
2015/05/23 职场文书
2016教师校本研修心得体会
2016/01/08 职场文书
励志语录:你若不勇敢,谁替你坚强
2019/11/08 职场文书
Spark SQL 2.4.8 操作 Dataframe的两种方式
2021/10/16 SQL Server