首页 > 编程 > Python > 正文

对pandas进行数据预处理的实例讲解

2020-02-22 23:46:29
字体:
来源:转载
供稿:网友

参加kaggle数据挖掘比赛,就第一个赛题Titanic的数据,学习相关数据预处理以及模型建立,本博客关注基于pandas进行数据预处理过程。包括数据统计、数据离散化、数据关联性分析

引入包和加载数据

import pandas as pdimport numpy as nptrain_df =pd.read_csv('../datas/train.csv') # train settest_df = pd.read_csv('../datas/test.csv') # test setcombine = [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基本操作

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表