《Python数据科学入门》之Series或Frame数据类型(第6章)

系统 1745 0

Python数据科学入门

Dmitry Zinoviev著
熊子源 译


第6章 使用Series和frame

Pandas模块的初中时为了给Python添加Series和frame两个抽象的数据结构,它们其实是Python的竞争对手、最早的数据科学语言——R语言的核心。

Pandas的frame本质是一个“智能”电子表格:具有标签、列(变量)、行(观测记录),以及大量内置操作的表。(Series是一个只有一列的frame)表的数据部分(单元格)以numpy数组的方式实现。

第31单元 pandas数据结构

Series
Series是一维的数据矢量。是同构的:Series中左右数据项必须是相同的数据类型。
Series中的函数:

  • head() 返回Series中前五行数据(默认5行)
  • tail() 返回Series中后五行数据(默认5行)

Frame
Frame是一个行和列都具有标签的表。可以通过二维numpy数组、元组列表、Python字典或一个frame构造出一个新的frame。

第32单元 数据重塑

索引:
Frame的索引是一组分配给frame行的标签集合。

reset_index() 删除现有索引
set_index() 建立一个新索引
drop() 返回一个删除了一行或若干行的frame的副本。

重建索引:
从现有的frame或series中选择一定的行排列、列排列或者行和列排列,来创建新的frame或Series。

分层索引:
也称为多级索引或多重索引。由以下三个列表组成:

  • 级别名称
  • 每个级别可能存在的所有标签
  • Frame或Series中每一项的实际值的列表。

MultiIndex.from_tuples() 使用带有标签的元组和可选的级别名称列表生成多级索引。

堆叠和旋转:
使用多级的列名可以将多级索引完全或部分扁平化,相反,使用多级索引也可以将多级的列名完全或部分扁平化。

stack() 增加索引的级别数,同时减少列名的级别数。
unstack() 增加列名的级别数,同时减少索引的级别数。
pivot(index,columns,values) 将frame转换为另一个frame,新的frame使用列索引作为新的索引,columns作为新的列名列表,values作为数据。

第33单元 处理缺失数据

Pandas沿用了传统的numpy.nan(第5章-第25单元)来表示缺失数据。Pandas还提供了识别和插补缺失值的函数。
缺失值必须被删除或者插补(将其替换成有意义的值)。

删除缺失值:
dropna()函数 可以删除部分(how=”any”,默认)或全部(how=”all”)无效的列(axis=0,默认)或行(axis=1),并返回“干净的”frame对象。

插补缺失数据:
两种常见的插补技术是使用常数(0,1)和“干净”值得平均数替换缺失值。
isnull()和notnull() 是互补的。当某个值是nan时,isnull()返回True;当某个值不是nan时,notnull()返回True。
根据IEEE 754的浮点数标准,表达式 np.nan==np.nan为False ,这使得直接比较是不可能的!

替换数据:
replace(val_or_list,new_val)函数 将一个值或值列表替换成一个新的值或值列表,列表的长度必须一样。除非传递inplace=True参数(表示在原始表中修改),负责该函数会返回一个新的frame或series。

第34单元 组合数据

合并:
如果两个frame具有一个相同的列,就可以将该列上的frame合并。即使没有相同名称的列,也可以指定其他列作为键。

            
              df = pd.merge(df1,df2,on=”key”)
df = pd.merge(df1,df2,left_on=”key1”,right_on=”key2”)

            
          

如果要在索引列而不是一般的列上合并,使用可选参数left_index=True和right_index=True实现。

join()和merge() 这两个函数使用同一个可选参数how,它的可接受参数为“left”(join()的默认值),“right”,“inner”,“outer”(merge()的默认值)

连接:
Concat()函数 通过一组frame彼此“竖直”(axis=0,默认值)或“水平”(axis=1)放置在一起来连接它们,并返回一个新的frame。

            
              Pd.concat([alco2009,population],axis=0).tail()

            
          

如果frame的维度不匹配,pandas就会在所谓的“空位”处加入具有缺失值的行或列。

删除重复行:

            
              duplicated([subset],keep=””)

            
          

返回一个布尔型的Series,表示在所有列或subset(是一个列名称组成的序列)表示的列中是否有重复的行。Keep表示控制标记的重复行是第一个重复行(“first”)、最后一个重复行(“last”)、每个重复行(“True”)都标记。

            
              drop_duplicates([subset],keep=””,Inpalce=True)

            
          

返回一个删除了所有列或subset(是一个列名称组成的序列)表示的列中重复行的frame或Series。Keep表示控制删除的行是第一个重复行(“first”)、最后一个重复行(“last”)、每个重复行(“True”)都删除。Inpalce=True可以从原始对象中删除重复项。

第35单元 数据的排序和描述

排序和分级:
sort_index()返回按照索引排序的frame。相关参数说明如下:

ascending (默认值为True(升序))来控制升序或降序;
na_position (取值为“first”或”last“)指定值为nan的单元在排序后的位置,
numeric_only 仅将等级限制为数值
na_option (取值为“top”,”bottom”或“keep”)设定nan的处理方式:将它们转移到新frame的顶部、底部或保留原始位置。

描述性统计量:

argmax() 找出最大值首次出现的索引位置(针对series)
idxmax() 找出最大值首次出现的索引位置(针对frame)
cumsum() 累积和
cumprod() 累计乘积
cummin() 累积最小值
cummax() 累积最大值
diff() 计算连续的列或Series项之间的滑动值

唯一性、计数、会员资格:

unique() 计算不同值的组成的数组,并能给出每个不同值出现的次数。用在Series中
value_counts() 计算不同值的组成的数组,并能给出每个不同值出现的次数。用在frame中
isin() 专门为Series和frame定义的。它返回一个与数据大小相同的布尔型的Series或frame,用于确定Series或frame的每一项是否存在于某个集合中。

第36单元 数据转换

数据聚合:

groupby() 通过一个或多个分类的键值将行分到不同的组中,从而实现对frame的分割。
聚合函数包括以下几种:

count() 返回组中的行数
sum() 返回组中数字行的总和
mean() 返回组中所有行相应的统计量度量
median() 返回组中所有行相应的统计量度量
std() 返回组中所有行相应的统计量度量
var() 返回组中所有行相应的统计量度量(没错,这四个函数效果一模一样)
min() 返回组中最小的行
max() 返回组中最大的行
prod() 返回组中数字行的乘积
first() 返回组中的第一行(用在frame中)
last() 返回组中的最后一行(用在frame中)

离散化:

离散化是指将连续变量转化为离散(分类)变量,通常用于直方图和机器学习。
qcuts() 与cuts()类似,不同的是qucts()使用分位数而不是区间宽度进行分割。可以用它来计算分位数。
qet_dummies() 将数组、series或frame转换为与原始对象拥有相同索引的另一个frame,每个列对应一个虚拟变量。

映射:

map() 将任意的单参数函数应用于选中列中的每一个元素。(非常低效)

第37单元 掌握pandas的文件读写功能

Pandas支持:

  • 自动索引和列名提取
  • 数据类型推断、数据转换和缺失值的检测
  • 日期时间解析
  • 消除“不干净”的数据
  • 数据分块

读取CSV和表格文件:

read_csv() 根据文件名或打开的文件句柄,从指定的CSV文件中读取一个frame。该函数具有近50个可选参数。
read_csv()函数中重要参数说明:

sep/delimiter 列分隔符,可以接受正则表达式
header 作为列名的行号(如果有自己的行号,则传递None)
index_col 作为索引的列名(False表示默认数字索引)
skiprows 要跳过的文件头行号或行号列表
thousands 表示大数时使用的千位分隔符
names 列名列表
na_values 用于处理缺失数据的字符串或字符串列表

"What you get is what you get.What you do with what you get, that's more the point."--《City of Ember 》


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论