主页 > Python结构 > 正文

对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的列


上一篇:Python视频修正库:MoviePy
下一篇:Python爬虫之selenium库运用详解

PythonTab微信大众号:

Python技能交流合作群 ( 请勿加多个群 ):

群1: 87464755

群2: 333646237

群3: 318130924

群4: 385100854