我正在将一个应用程序从Pandas转换为polar,以寻求更好的可伸缩性和性能。我的应用程序从hdf5复合数据集(使用h5py)读取数据到numpy结构化数组中,从中我直接创建Pandas数据框,如下所示,
# dset is the hdf5 compound Dataset
np_struct_array = np.empty(dset.shape, dset.dtype)
dset.read_direct(np_struct_array)
df=pd.DataFrame(np_struct_array, dset.dtype)
numpy结构化数组的dtype取决于正在读取的h5数据集,但典型的示例是
[('SID', '<i8'), ('G', '<i8'), ('C', '<i8'), ('D', '<f8'), ('DOMAIN_ID', '<i8')]
这是超级快的,数据框直接使用numpy结构化数组中的列名和类型
当我切换到polar并使用相同的方法时,结果polar数据框是对象类型的单列数据框,这不是我需要的-例如,从上面numpy结构化数组产生的模式是{'column_0': Object}
我可以执行以下操作并获得我需要的数据帧,但性能很差-比Pandas慢10倍
df=pd.DataFrame(
{
field_name: np_struct_array[field_name] for field_name in np_struct_array.dtype.fields
}
)
所以我的问题是什么是最快/最有效的方法来获得hdf5复合数据集到极地数据框架?有没有更好的方法来使用numpy结构化数组与北极星为例?我可以继续将数据读入Pandas数据框架,然后从中创建polar数据框架,但我认为这会创建一个副本,我宁愿避免,因为数据可能很大。
如有任何建议,我们将不胜感激。
Doug
仅供参考:昨天我添加了对从numpy结构化/记录数组初始化polar DataFrame的原生支持,它将在即将发布的0.17.12
版本中可用。(本机支持从极点导出到numpy结构化/记录数组)。