资讯专栏INFORMATION COLUMN

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

roundstones / 2656人阅读

摘要:前言在数据分析和建模之前需要审查数据是否满足数据处理应用的要求,以及对数据进行清洗,转化,合并,重塑等一系列规整化处理。通过数据信息查看可知数据中存在缺失值,比如各存在个,各存在个。

前言

在数据分析和建模之前需要审查数据是否满足数据处理应用的要求,以及对数据进行清洗,转化,合并,重塑等一系列规整化处理。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"])

更多python量化交易内容互动请加微信公众号:PythonQT-YuanXiao
欢迎订阅量化交易课程:链接地址

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/41756.html

相关文章

  • 数据科学系统学习】Python # 数据分析基本操作[四] 数据规整数据聚合与分组运算

    摘要:数据规整化清理转换合并重塑数据聚合与分组运算数据规整化清理转换合并重塑合并数据集可根据一个或多个键将不同中的行链接起来。函数根据样本分位数对数据进行面元划分。字典或,给出待分组轴上的值与分组名之间的对应关系。 本篇内容为整理《利用Python进行数据分析》,博主使用代码为 Python3,部分内容和书本有出入。 在前几篇中我们介绍了 NumPy、pandas、matplotlib 三个...

    The question 评论0 收藏0
  • Python数据分析入门之pandas总结基础(二)

    摘要:一大熊猫世界来去自如的老生常谈,从基础来看,我们仍然关心对于与外部数据是如何交互的。函数受限制问题唯一重要的参数,标志着一个的第个页将会被取出。数据分析入门之总结基础一欢迎来翔的博客查看完成版。 一.大熊猫世界来去自如:Pandas的I/O 老生常谈,从基础来看,我们仍然关心pandas对于与外部数据是如何交互的。 1.1 结构化数据输入输出 read_csv与to_csv 是⼀对...

    verano 评论0 收藏0
  • 学习Python:做数据科学还是网站开发?

    摘要:属于前一种,而且日益被用于数学计算机器学习和多种数据科学应用。近来,由于拥有多个针对机器学习自然语言处理数据视觉化数据探索数据分析和数据挖掘的插件,丰富的数据科学生态体系得到了较大的发展,甚至有将数据科学社区化的趋势。 译者注:本文的英文原文地址是:Python for Data Science vs Python for Web Development,发布时间是10月29日。译者一...

    neu 评论0 收藏0
  • 如何用Python进行数据分析

    摘要:编程基础要学习如何用进行数据分析,数据分析师建议第一步是要了解一些的编程基础,知道的数据结构,什么是向量列表数组字典等等了解的各种函数及模块。数据分析师认为数据分析有的工作都在处理数据。 showImg(https://segmentfault.com/img/bVbnbZo?w=1024&h=653); 本文为CDA数据分析研究院原创作品,转载需授权 1.为什么选择Python进行数...

    lifefriend_007 评论0 收藏0
  • 8步从Python白板到专家,从基础到深度学习

    摘要:去吧,参加一个在上正在举办的实时比赛吧试试你所学到的全部知识微软雅黑深度学习终于看到这个,兴奋吧现在,你已经学到了绝大多数关于机器学习的技术,是时候试试深度学习了。微软雅黑对于深度学习,我也是个新手,就请把这些建议当作参考吧。 如果你想做一个数据科学家,或者作为一个数据科学家你想扩展自己的工具和知识库,那么,你来对地方了。这篇文章的目的,是给刚开始使用Python进行数据分析的人,指明一条全...

    Zachary 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<