我有一个数据集,它是一个CSV文件,我将其作为Pandas dataframe打开并分析。我现在正在根据这些数据生成“嵌入”,我也想分析这些数据。数据集相当大(数百万行),所以我注意到,将嵌入作为pandas dataframe的一部分追加并存储会使RAM内存耗尽。除此之外,在数据框架中存储和保存numpy数组也有点“尴尬”。因为我想分析整个数据集,包括嵌入,所以把它们存储在所谓的嵌入存储中没有太大意义,因为我总是想循环整个数据集。对于如何使用这些数据,是否有任何最佳实践或建议?
nsc4cvqm1#
我会推荐两件事:1.请确保为每一列使用正确的数据类型,因为这可以显著减少内存使用1.用Parquet地板。它大大减少了使用。如果1)和2)不够,那么就有可能3)。你可以用多个parquets文件将你的大数据框架分成块。我把这作为一个潜在的解决方案,因为我不确定它符合您的需要的基础上,您的描述。
l7wslrjt2#
一般来说,你的问题太宽泛了。需要有关内存不足时情况的更多信息。数百万行对于pandas dataframe来说是相当大的。一般方法:1.为每个列使用向下转换。也就是说,如果你使用诸如0.98、1.13、50.3等的代码来操作,你不需要float 64。1.如果有类似的数据,请使用分类列。如果您看到的数据类型为Object,但它不是文本,请尝试转换为分类类型。1.使用np.where /np.select大大加快数据操作1.小心任何一个groupby。使用大型数据集和不正确的参数进行分组操作可能会导致进程OOM如果你做了以上所有的事情,你仍然不符合记忆:1.尝试使用duckDB作为数据集https://github.com/duckdb/duckdb的存储1.尝试Polars https://github.com/pola-rs/polars1.通过服务器或硬件升级购买RAM1.从原始数据集中选择统计显著性子集,并将其用于您的工作(请不要问我如何使用)
2条答案
按热度按时间nsc4cvqm1#
我会推荐两件事:
1.请确保为每一列使用正确的数据类型,因为这可以显著减少内存使用
1.用Parquet地板。它大大减少了使用。
如果1)和2)不够,那么就有可能3)。你可以用多个parquets文件将你的大数据框架分成块。我把这作为一个潜在的解决方案,因为我不确定它符合您的需要的基础上,您的描述。
l7wslrjt2#
一般来说,你的问题太宽泛了。需要有关内存不足时情况的更多信息。数百万行对于pandas dataframe来说是相当大的。
一般方法:
1.为每个列使用向下转换。也就是说,如果你使用诸如0.98、1.13、50.3等的代码来操作,你不需要float 64。
1.如果有类似的数据,请使用分类列。如果您看到的数据类型为Object,但它不是文本,请尝试转换为分类类型。
1.使用np.where /np.select大大加快数据操作
1.小心任何一个groupby。使用大型数据集和不正确的参数进行分组操作可能会导致进程OOM
如果你做了以上所有的事情,你仍然不符合记忆:
1.尝试使用duckDB作为数据集https://github.com/duckdb/duckdb的存储
1.尝试Polars https://github.com/pola-rs/polars
1.通过服务器或硬件升级购买RAM
1.从原始数据集中选择统计显著性子集,并将其用于您的工作(请不要问我如何使用)