从 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))
我正在用 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))