python将数据放入内存_如何使用python将数据快速加载到内存中?

2022-08-31 10:19:14

这实际上取决于阅读的哪一部分需要10分钟。在若它实际上是从磁盘读取数据,那个么显然任何更紧凑形式的数据都会更好。在

如果它正在处理CSV格式(你可以告诉你这一点,因为你的CPU在一个核心上接近100%,而在另外两个内核上,它将非常低),那么你需要一个已经预处理过的表单。在

如果是交换内存,例如,因为您只有2GB的物理RAM,那么除了分割数据之外,没有任何帮助。在

知道你有哪一个很重要。例如,流压缩数据(例如,使用gzip)将使第一个问题变得更好,但第二个问题更糟。在

听起来你可能有第二个问题,这是很好的了解。(但是,不管遇到什么问题,有些事情你都可以做得更好。)

您将其存储在sqlite数据库中的想法很好,因为它至少可以同时解决这三个问题;您只需根据需要从磁盘读取数据,并且它以一种合理紧凑且易于处理的形式存储。但这并不是前两个问题的最佳解决方案,只是一个“相当好”的解决方案。在

特别是,如果您确实需要跨所有350000行执行数组范围的工作,并且无法将这些工作转换为SQL查询,那么您将无法从sqlite中获得太多好处。最终,您将执行一个巨大的SELECT来获取所有数据,然后将所有数据处理成一个大框架。在

写出形状和结构信息,然后以NumPy二进制形式写入底层数组。然后,为了阅读,你必须把它颠倒过来。NumPy的二进制格式只是尽可能紧凑地存储原始数据,而且它是一种可以盲目快速写入的格式(它基本上只是将原始内存存储转储到磁盘)。这将改善第一个和第二个问题。在

类似地,在HDF5中存储数据(使用Pandas IO或外部库,如PyTables或h5py)将改善第一个和第二个问题。HDF5被设计成一种相当紧凑和简单的格式,用于存储通常存储在Pandas中的相同类型的数据。(它包括可选的压缩作为一个内置功能,所以如果你知道你有哪两个,你就可以调整它。)它不能像最后一个一样解决第二个问题,但可能已经足够好了,而且它更简单(一旦你不再设置HDF5库)。在

最后,对数据进行酸洗有时可能会更快。^{}是Python的本机序列化格式,它可以被第三方模块钩住,NumPy和Pandas都将其钩住,以便能够很好地处理数据。在

(尽管这不适用于这个问题,但它可能有助于以后搜索:如果您使用的是python2.x,请确保显式使用pickle format 2;IIRC,NumPy在默认pickle格式0中非常糟糕。在python3.0+中,这与此无关,因为默认格式至少为3。)

  • 作者:weixin_39754831
  • 原文链接:https://blog.csdn.net/weixin_39754831/article/details/112989578
    更新时间:2022-08-31 10:19:14