python - 保存到 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
解决方案
没有适当的堆栈跟踪很难调试,请添加一个。
也就是说,您正在打开 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)
有关更多详细信息,请参阅本指南
推荐阅读
- android - 如何在过渡到下一个片段后删除片段
- android - 使用 Room 的 Android 应用程序中应该有多少个存储库?
- php - 错误将 ID 为 [1] 的模型 [App\Post] 编码为 JSON:格式错误的 UTF-8 字符,可能编码不正确
- bash - 当“for word in $string”在空格上拆分时,为什么默认 $IFS 会扩展为换行符?
- bash - 为用户提供 sudo 访问权限的 shell 脚本
- python - 超集仪表板 - 动态更新
- dask - 将 dask 数组写入 netcdf
- java - 如何在不询问数组大小的情况下在arraylist中输入值?
- linux - 搜索早于特定时间的文件并将它们移动到特定文件夹中
- ios - UICollectionView 的 deleteSections() 动画