首页 > 解决方案 > 保存到 Pickle 时出错 - TypeError: write() 参数必须是 str,而不是字节

问题描述

我正在尝试将以下内容保存到pickle,但收到错误消息说我的参数必须是str,而不是字节。我查看了 pickle 文档并尝试将 x 和 y 转换为字符串,但没有成功。我究竟做错了什么?

import pandas as pd
from sklearn.naive_bayes import GaussianNB
import pickle



df = {'Description':[100,200,300,400,500],'Level_1':[1,2,3,4,5]}

df = pd.DataFrame(df,columns=['Description','Level_1'])

print(df)

   Description  Level_1
0          100        1
1          200        2
2          300        3
3          400        4
4          500        5

x = df[['Description']]
y = df['Level_1']

nb = GaussianNB()
nb.fit(x,y)

open('level1_classifier.pk', 'wb')
with open ('level1_classifier.pk') as l1clf:
    pickle.dump(nb, l1clf)

Error Message:
 ``TypeError                                 Traceback (most recent call last)
<ipython-input-21-89a76f30f361> in <module>
      6 #open('level1_classifier.pk', 'wb')
      7 with open ('level1_classifier.pk') as l1clf:
----> 8     pickle.dump(nb, l1clf)

TypeError: write() argument must be str, not bytes

标签: pythonpickle

解决方案


没有适当的堆栈跟踪很难调试,请添加一个。

也就是说,您正在打开 pickle 文件进行写入,然后打开它进行读取。这是不必要的,可能是这里失败的原因。

这个:

open('level1_classifier.pk', 'wb')
with open ('level1_classifier.pk') as l1clf:
    pickle.dump(nb, l1clf)

应该是这样的:

with open('level1_classifier.pk', 'wb') as l1clf:
    pickle.dump(nb, l1clf)

有关更多详细信息,请参阅本指南


推荐阅读