Numpy ndarray
Numpy是高性能科学计算和数据分析的基础包,其提供了一个重要的数据结构ndarray。ndarray是一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组,是一个通用的同构数据多维容器(所有元素必须是相同的类型)。此外其提供了一个简单易用的C API,因此很容易将数据传递给低级语言编写的外部库。
Pandas dataframe
Pandas为目前最常用的数据分析与处理的高级库,其提供了一个使数据分析变得更简单快捷的高级数据结构pandas。dataframe基于numpy的ndarray构建而成,dataframe可以自动添加索引,并自动根据索引将数据进行对齐。dataframe还可以灵活的方便的处理缺失数据以及重复数据,其同样支持其他的关系型数据库中常用的功能方法。
关于dataframe占用内存大
dataframe处理小规模的数据集(小于100兆)时,其性能不会成为问题。处理大规模数据集(数百G)时一般使用spark等大数据工具。对于中等数据集(数G)dataframe容易遭遇性能瓶颈,为了在中等数据集上使用灵活且便利的dataframe数据格式,需要了解dataframe占用内存大的原因,并找到解决的方法。
在dataframe中相同数据类型dtypes的列会被存储在同一个块block中,每一个block是一个numpy ndarray并存储于内存中连续的区域。pandas 的 BlockManager 类则负责保留行列索引与实际块之间的映射关系。将数据初始导入为dataframe格式时,每个block都是用相同的数据结构,会导致占用高于理论值的内存。
逐条生成并写入特征数据