从 CSV 或 DataFrame 中存储和提取 pickle 文件

Storing and extracting pickle file from CSV or DataFrame

我正在用 pickle 存储 sklearn 模型。 但是我工作的环境只允许CSV和DataFrame数据的持久化。

我尝试将模型保存到 DataFrame 中:

#create empty DataFrame
model_df = pd.DataFrame(columns=["modelstring"])

#Save one model to each row
for model in range(1, len(model_dict)):
    model_df.loc[model] = pickle.dumps(model_dict[model], protocol = 3)

...

#Store and reload csv file
model_df["modelstring"].to_csv("models.csv")
model_df2 = pd.read_csv("models.csv")

...
#Load Model from Pickle 
model = pickle.loads(model_df2.loc[1].modelstring)

但是当读出来的时候,文件不再是字节码,而是字符串,我无法将其转换回字节。

输入格式:b'\x80\x03csklearn.svm.classes\nOneClassSVM\nq\x...'

输出格式:'b\'\x80\x03csklearn.svm.classes\nOneClassSVM\nq...'

有什么方法可以将模型存储在 csv 中并能够读回它们吗?

谢谢。

我在复制您的代码时遇到了几个问题(有一些错误)。但我设法解决了它:)

您可以在存储时使用hex,在读取文件时使用bytes.fromhex()

它是这样的:

#create empty DataFrame
model_df = pd.DataFrame(columns=["modelstring"])

#Save one model to each row
for model in range(1, len(model_dict)):
    model_df.loc[model] = pickle.dumps(model_dict[model], protocol = 3).hex()

...

#Store and reload csv file
model_df["modelstring"].to_csv("models.csv")
model_df2 = pd.read_csv("models.csv")

...
#Load Model from Pickle 
model = pickle.loads(bytes.fromhex(model_df2.loc[1].modelstring))