将数据帧保存到磁盘会丢失 numpy 数据类型

Posted

技术标签:

【中文标题】将数据帧保存到磁盘会丢失 numpy 数据类型【英文标题】:Saving dataframe to disk loses numpy datatype 【发布时间】:2021-02-19 17:44:29 【问题描述】:

我有一个大数据框,我需要将其保存到磁盘。 列的类型有 numpy.int32 或 numpy.floatxx

             int32Data     ColumName  ...  float32Data  otherTypeData
0        150294240   4260.0  ...                  3.203908e+02  7960.0
1        150294246   4260.0  ...                  0.000000e+00  7960.0
2        150294252   4280.0  ...                  1.117543e+03  7960.0
3        150294258   4260.0  ...                  5.117185e+01  7960.0
4        150294264   4260.0  ...                  5.999993e+02  7960.0
           ...      ...  ...                           ...     ...
1839311  161375508  54592.0  ...                  8.990022e+05     0.0
1839312  161375514  54624.0  ...                  2.097199e+06     0.0
1839313  161375520  54656.0  ...                  1.192150e+06     0.0
1839314  161375526  54688.0  ...                  1.249997e+06     0.0
1839315  161375532  54592.0  ...                  8.949273e+05     0.0

使用正确的数据类型可以节省大量空间和处理能力。

但是当我将数据帧 df 保存到磁盘时

np.save(FilePath,df)

再读一遍

ReadData=np.load(FilePath).tolist()
df=DataFrame(ReadData)

然后将所有数据转换为numpy.float64(并删除列名)

是否可以在保留每列(和列名)的数据类型的同时保存和加载数据框?

【问题讨论】:

您可以尝试保存到HDF 文件,它可以非常快速地保存大型数据帧的类型和运行(I/O)。 np.save 保存 numpy 数组。在这种情况下,我认为会保存df.to_numpy()。看看那是肯定的。 Pandas 有自己的保存工具。 @Moti 将其写为答案,我将其标记为答案。这正是我所需要的,而且还节省了大量磁盘空间。完美。 【参考方案1】:

HDF5 存储可能正是您所需要的,它可以让您高效地存储大量数据,保存数据类型并让您快速检索数据。您可以在documentation找到更多详细信息。

如何使用它的示例:

import pandas as pd

with pd.HDFStore(file_path) as hdf:
  # to save the dataframe to the HDF
  hdf.put(key, df)

  # and to retrieve it later
  df = hdf.get(key)

【讨论】:

以上是关于将数据帧保存到磁盘会丢失 numpy 数据类型的主要内容,如果未能解决你的问题,请参考以下文章

如何将稀疏的 pandas 数据帧转换为 2d numpy 数组

在 python 和 numpy 中处理大数据,没有足够的内存,如何将部分结果保存在磁盘上?

保存在磁盘上的 numpy 数组中的随机访问

java.sql.SQLException:将 Spark 数据帧保存到 Sybase 时找不到类型“TIMESTAMP”

将数据帧转换为 numpy 数组会导致所有数字以科学计数法打印 [关闭]

将 pandas 数据帧中的 numpy 数组加载到 tensorflow 数据集中