将具有对象 dtype 的数据帧写入 HDF5 仅在转换为字符串后才有效

Writing data frame with object dtype to HDF5 only works after converting to string

我有一个大数据数据框,我想将它写入磁盘以便快速检索。我相信 to_hdf(...) 推断列的数据类型,但有时会出错。我想知道正确的处理方法是什么。

import pandas as pd
import numpy as np

length = 10
df = pd.DataFrame({"a": np.random.randint(1e7, 1e8, length),})

# df.loc[1, "a"] = "abc"
# df["a"] = df["a"].astype(str)
print(df.dtypes)
df.to_hdf("df.hdf5", key="data", format="table")

取消注释各行会使我得到以下内容。

现在我想知道第二种情况发生了什么,有没有办法避免这种情况?我发现的唯一方法是遍历所有列,检查它们是否 dtype('O') 并将它们明确地转换为 str.

我没有使用 hdf5,而是找到了一个似乎非常适合这项工作的通用 pickling 库:jiblib

存储和加载数据很简单:

import joblib
joblib.dump(df, "file.jl")
df2 = joblib.load("file.jl")