Python的datatable程序包概述( 二 )


%%timedatatable_pandas = datatable_df.to_pandas()__________________________________CPU times: user 17.1 s, sys: 4 s, total: 21.1 sWall time: 21.4 s 
看来将文件读取为datatable框架,然后将其转换为panda的dataframe所需的时间比直接利用pandas的dataframe读取文件所需的时间要少 。所以,通过datatable导入一个大数据文件,然后将其转换为panda的dataframe,这似乎是一个好主意 。
type(datatable_pandas)__________________________________pandas.core.frame.DataFrame 
基础Frame属性
 
一起来看看与pandas性能相似的datatable fame的基础性能 。
print(datatable_df.shape) # (nrows, ncols)print(datatable_df.names[:5]) # top 5 column namesprint(datatable_df.stypes[:5]) # column types(top 5)__________________________________(2260668, 145)('id', 'member_id', 'loan_amnt', 'funded_amnt', 'funded_amnt_inv')(stype.bool8, stype.bool8, stype.int32, stype.int32, stype.float64) 
也可利用head 指令输出靠前的“n”行 。
datatable_df.head(10) 

Python的datatable程序包概述

文章插图
 
datatableframe中前10行略表
颜色表示数据类型 。其中,红色表示字符串,绿色表示整数,蓝色则代表浮动 。
 
汇总统计信息
 
在panda中计算汇总统计信息是一个消耗内存的过程,但在datatable中就不是如此了 。下面每列汇总信息均可通过datatable来计算:
datatable_df.sum() datatable_df.nunique()datatable_df.sd() datatable_df.max()datatable_df.mode() datatable_df.min()datatable_df.nmodal() datatable_df.mean() 
利用datatable和pandas来计算平均值,测量各所需计算时间之间的差异 。
 
利用datatable
%%timedatatable_df.mean()__________________________________CPU times: user 5.11 s, sys: 51.8 ms, total: 5.16 sWall time: 1.43 s 
利用pandas
pandas_df.mean()__________________________________Throws memory error. 
上述指令在pandas中未能实现,因为其在开始就显示内存错误 。
 
数据操作
像dataframe这类数据表是柱状数据结构 。在datatable中,所有操作最基础的媒介就是方括号符号,即传统矩阵索引,只不过其具备更多的功能 。
 
Python的datatable程序包概述

文章插图
 
 
datatable中的方括号符号
 
在指数矩阵、C/C++, R, pandas, numpy等数学运算中利用相同的DT[i, j]符号 。来看看如何利用datatable执行常见的数据操作活动:
#选择行/列子集
下列代码从数据集中选择所有的行及 funded_amnt列 。
datatable_df[:,'funded_amnt'] 
 
Python的datatable程序包概述

文章插图
 
这里展示了是如何选取5行及3列的 。
datatable_df[:5,:3] 
Python的datatable程序包概述

文章插图
 
 
 
#Frame排序
利用datatable
通过datatable完成利用特定列队frame的排序,如下所示:
%%timedatatable_df.sort('funded_amnt_inv')__________________________________CPU times: user 534 ms, sys: 67.9 ms, total: 602 msWall time: 179 ms 
利用pandas
%%timepandas_df.sort_values(by = 'funded_amnt_inv')__________________________________CPU times: user 8.76 s, sys: 2.87 s, total: 11.6 sWall time: 12.4 s 
关注datatable和pandas大量的时间差异 。
#删除行/列
这里阐述了如何删除名为member_id的列:
del datatable_df[:, 'member_id'] 
#分组
就像在pandas中的一样,datatable也有分组功能 。来看看如何利用grade列来对funded_amount列平均值进行分组 。
利用datatable
%%timefor i in range(100): pandas_df.groupby("grade")["funded_amnt"].sum()__________________________________CPU times: user 12.9 s, sys: 859 ms, total: 13.7 sWall time: 13.9 s 
.f代表什么?
f代表frame proxy,提供一种简单的方法来使用当前操作的Frame 。就例子而言,dt.f代表dt_df 。
#筛选行
 
筛选行的句法与分组相似 。对loan_amnt的这些行进行筛选,其中,loan_amnt的值大于funded_amnt 。
datatable_df[dt.f.loan_amnt>dt.f.funded_amnt,"loan_amnt" 
储存Frame
还可以将Frame的内容写入csv文件,以便将来使用
datatable_df.to_csv('output.csv')documentation传送门,了解更多操作功能:https://datatable.readthedocs.io/en/latest/using-datatable.html


推荐阅读