对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框架配置使用Jinja2模板引擎的方法
Jun 30 Python
python 类详解及简单实例
Mar 24 Python
Python爬虫包BeautifulSoup异常处理(二)
Jun 17 Python
python实现周期方波信号频谱图
Jul 21 Python
Python3实现的简单工资管理系统示例
Mar 12 Python
python实现图片中文字分割效果
Jul 22 Python
Python 类的魔法属性用法实例分析
Nov 21 Python
python 爬取B站原视频的实例代码
Sep 09 Python
python使用matplotlib:subplot绘制多个子图的示例
Sep 24 Python
python代数式括号有效性检验示例代码
Oct 04 Python
实操Python爬取觅知网素材图片示例
Nov 27 Python
Python os和os.path模块详情
Apr 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
php将gd生成的图片缓存到memcache的小例子
2013/06/05 PHP
探讨Hessian在PHP中的使用分析
2013/06/13 PHP
PHP实现根据银行卡号判断银行
2015/04/29 PHP
PHP的压缩函数实现:gzencode、gzdeflate和gzcompress的区别
2016/01/27 PHP
JS验证邮箱格式是否正确的代码
2013/12/05 Javascript
jquery遍历筛选数组的几种方法和遍历解析json对象
2013/12/13 Javascript
javascript进行四舍五入方法汇总
2014/12/16 Javascript
JavaScript的原型继承详解
2015/02/15 Javascript
javascript模拟C#格式化字符串
2015/08/26 Javascript
JS实现浏览器状态栏显示时间的方法
2015/10/27 Javascript
JS模态窗口返回值兼容问题的完美解决方法
2016/05/28 Javascript
js移动焦点到最后位置的简单方法
2016/11/25 Javascript
JS实现复制功能
2017/03/01 Javascript
Javascript封装id、class与元素选择器方法示例
2017/03/13 Javascript
vue forEach循环数组拿到自己想要的数据方法
2018/09/21 Javascript
基于React Native 0.52实现轮播图效果
2020/08/25 Javascript
Vue分页插件的前后端配置与使用
2019/10/09 Javascript
微信小程序 SOTER 生物认证DEMO 指纹识别功能
2019/12/13 Javascript
Nest.js 授权验证的方法示例
2021/02/22 Javascript
[44:04]OG vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
Python 类与元类的深度挖掘 II【经验】
2016/05/06 Python
利用Python实现命令行版的火车票查看器
2016/08/05 Python
Python简单遍历字典及删除元素的方法
2016/09/18 Python
PyTorch的SoftMax交叉熵损失和梯度用法
2020/01/15 Python
python 动态渲染 mysql 配置文件的示例
2020/11/20 Python
Trunki英国官网:儿童坐骑式行李箱
2017/05/30 全球购物
巴西最好的男鞋:Rafarillo
2018/05/25 全球购物
莫斯科购买书籍网站:Book24
2020/01/12 全球购物
俄罗斯电子产品在线商店:UltraTrade
2020/01/30 全球购物
新法人代表任命书
2014/06/06 职场文书
娱乐节目策划方案
2014/06/10 职场文书
浅谈Python数学建模之线性规划
2021/06/23 Python
java设计模式--原型模式详解
2021/07/21 Java/Android
Android Flutter实现3D动画效果示例详解
2022/04/07 Java/Android
Python爬虫 简单介绍一下Xpath及使用
2022/04/26 Python
Python自动化实战之接口请求的实现
2022/05/30 Python