首页 > 解决方案 > 从 CSV 或 DataFrame 存储和提取泡菜文件

问题描述

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

我尝试使用以下方法将模型保存到 DataFrames:

#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 中并能够将它们读回?

谢谢。

标签: pythonpandascsvscikit-learnpickle

解决方案


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

您可以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))

推荐阅读