我正在将一个应用程序从Pandas转换为Polars,以寻求更好的可扩展性和性能。我的应用程序从hdf 5复合数据集(使用h5 py)读取数据到一个numpy结构化数组中,从中我直接创建了Pandas Dataframe ,如下所示:
# 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')]
这非常快,而且dataframe直接使用numpy结构化数组中的列名和类型
当我切换到Polars并使用相同的方法时,生成的Polars Dataframe 是一个类型为object的单列 Dataframe ,这不是我所需要的-例如,从上面的numpy结构化数组生成的模式是{'column_0': Object}
我可以执行以下操作并获得所需的dataframe,但性能很糟糕-比Pandas慢10倍
df=pd.DataFrame(
{
field_name: np_struct_array[field_name] for field_name in np_struct_array.dtype.fields
}
)
所以我的问题是什么是最快/最有效的方法来获得hdf 5复合数据集到Polars Dataframe ?有没有更好的方法来使用numpy结构化数组,例如Polars?我可以继续将数据读入Pandas Dataframe ,然后从中创建Polars Dataframe ,但我认为这将创建一个副本,我宁愿避免,因为数据可能很大。
任何建议将不胜感激。
道格
1条答案
按热度按时间n6lpvg4x1#
仅供参考:我昨天添加了native support,用于从numpy结构化/记录数组初始化polars DataFrame,它将在即将发布的
0.17.12
版本中提供。(原生支持从polars * 导出 * 到numpy结构化/记录数组也即将合并)。