Pandas库基础分析——数据规整化处理

前言

在数据分析和建模之前需要审查数据是否满足数据处理应用的要求,以及对数据进行清洗,转化,合并,重塑等一系列规整化处理。pandas标准库提供了高级灵活的方法,能够轻松地将数据规整化为正确的形式,本文通过例程介绍使用pandas库从获取数据到最终数据重塑的方法。

数据文件获取

Pandas库提供专门处理csv文件的方法read_csv(),具体可参考《Pandas库基础分析——CSV文件加载和存储》中的Pandas库读写CSV文件章节。

数据信息查看

当数据量较大时,将数据所有信息输出到控制台中会显得过于冗杂,可通过查看部分数据信息,简要了解数据的特性。

(1)查看数据前5行和尾部倒数5行数据,列名和索引信息,数据行列形状

print df_csvload.head()#查看前几行   
print df_csvload.tail()#查看后几行
print df_csvload.columns#查看列名
print df_csvload.index#查看索引
print df_csvload.shape#查看形状

图片描述

(2)查看各列数据描述性统计信息,如最小值、最大值、均值、标准差等

print df_csvload.describe()#查看各列数据描述性统计

图片描述

(3)查看数据是否有缺失及每列数据的类型

print df_csvload.info()#查看缺失及每列数据类型

图片描述

缺失值处理

对Pandas做数据时不可避免会因为一些原因出现缺失值NaN(Not a number),比如两个DataFrame对象进行运算时对于无法匹配的位置就会出现缺失值。通过数据信息查看可知数据中存在缺失值,比如dataA、dataC、dataE各存在2个NaN,dataB、dataD、各存在1个NaN。

(1)Pandas包中isnull()和notnull()方法用于判断数据是否为缺失值,若是缺失值则isnull()返回值为True,notnull()返回值为False。

print df_csvload.isnull()#判断数据缺失值

图片描述

(2)由于isnull()和notnull()方法判断缺失值生成的是所有数据的True/False矩阵,对于庞大的Dataframe数据,很难一眼看出缺失值位置,可在df_csvload.isnull()矩阵基础上结合数据转置方法.T和筛选满足True值条件列方法.any(),查找出含有NaN值所在的行。

print df_csvload[df_csvload.isnull().T.any().T]#查看NAN值所在行

图片描述

(3)对缺失值的处理的方法有删除和填充,此处通过DataFrame.dropna()方法将所有值都为缺失值的行删除,DataFrame.fillna()方法在列方向上对缺失值前值填充。

df_csvload = df_csvload.dropna(axis=0,how='all')#NAN值删除 行所有为NAN删除
df_csvload.fillna(method='ffill',axis=0,inplace=True)#NAN值填充 列方向前值填充
print df_csvload[df_csvload.isnull().values==True]#查看NAN值删除填充后值

图片描述

特殊值处理

(1)查看各列数据描述性统计信息时发现“Flow”列最小值为0值,查找出0值具体位置后用“Flow”列通过中位值填充0值

注:loc为通过行和列的标签名提取相应数据,iloc为通过位置提取特定的数据,而ix为标签和位置索引混合的方式切片数据
print df_csvload[df_csvload.values==0]#查看所有0值的元素
print df_csvload[df_csvload.Flow.isin([0])]#查看指定列0值
df_csvload.loc[df_csvload.loc[:,'Flow']==0,'Flow'] = df_csvload.Flow.median()#中位值替换0值

图片描述

(2)查看各列数据值时发现“dateE”列数据精度保留了6位小数,而“Flow”列数据精度保留了1位小数,此处将“dateE”列数据的精度更改为2位小数,将“Flow”列数据转化为整数,以便于显示和运算。

df_csvload = df_csvload.round(2)#保留2位小数
df_csvload.Flow = df_csvload.Flow.astype(int)#转换为整数

图片描述

数据运算转化

(1)筛选出“Flow”列值大于该列均值的行,并只提取出所需的“date”列数据用于后续的运算。(可使用&、|符号实现多条件筛选)

new_df = df_csvload[['dataA','dataB','dataC','dataD']][(df_csvload.Flow>df_csvload.Flow.mean())]

图片描述

(2)通过apply()方法作用于DataFrame的行,计算出new_df每行数值最大与最小值之差,以及每行数值与平均值之差。

max_min_df = new_df.apply((lambda x:x.max() - x.min()),axis = 1)#计算横轴最大最小值之差
err_mean_df = new_df.apply((lambda x:x-x.mean()),axis = 1)#计算横轴数值与平均值之差

图片描述

也可分别计算new_df中每列数值与mean_df均值的误差。Pandas中Series与Series之间通过index匹配运算(加减乘除),同理Series与DataFrame之间是Series的index与DataFrame的columns之间匹配,运算的方式是将DataFrame每一行都与Series进行匹配运算,DataFrame之间则同时对index与columns进行匹配成功的元素进行运算,当以上类型出现无法匹配时用NaN进行填充。

mean_df = new_df.apply((lambda x:x.mean()),axis = 1)#计算横轴平均值
dataA_df = new_df.dataA - mean_df#计算误差
dataB_df = new_df.dataB - mean_df#计算误差
dataC_df = new_df.dataC - mean_df#计算误差
dataD_df = new_df.dataD - mean_df#计算误差

(3)applymap()方法作用于DataFrame元素级,此处将err_mean_df数值转换为真值矩阵

err_mean_df = err_mean_df.applymap(lambda x: True if(x>0) else False)# 大于零为True 小于零为False

数据合并及连接

pandas提供了三种方式实现数据的合并,pandas.merge根据一个或多个键将不同的DataFrame中的行连接起来;pandas.concat沿着一条轴将多个对象堆叠到一起;combine_first将重复数据编接在一起,用一个对象中的值填充另外一个对象中的缺失值。此处使用pd.concat将数据按列方向合并,即axis为1,设置keys值用于形成连接轴上的层次化索引。

mer_df = pd.DataFrame({'max_min':max_min_df,'mean':mean_df})
result =pd.concat([mer_df, err_mean_df],axis=1,keys=['diff_para','diff_err'])

图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值