将数据帧保存到磁盘会丢失 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 中处理大数据,没有足够的内存,如何将部分结果保存在磁盘上?
java.sql.SQLException:将 Spark 数据帧保存到 Sybase 时找不到类型“TIMESTAMP”