提问人:Joel Porcaro 提问时间:7/14/2019 最后编辑:Joel Porcaro 更新时间:11/12/2023 访问量:12094
泡菜编码 utf-8 问题
Pickle encoding utf-8 issue
问:
我正在尝试将 pandas 数据帧腌制到我的本地目录中,以便我可以在另一个 jupyter 笔记本中处理它。起初,写入似乎很成功,但是当尝试在新的 jupyter 笔记本中读取它时,读取不成功。
当我打开我似乎写的泡菜文件时,该文件的唯一内容是:
错误!/Users/.../income.pickle 不是 UTF-8 编码的 保存已禁用。 有关更多详细信息,请参阅控制台。
我还检查了一下,泡菜文件本身只有几千字节。
这是我编写泡菜的代码:
with open('income.pickle', 'wb', encoding='UTF-8') as to_write:
pickle.dump(new_income_df, to_write)
这是我阅读它的代码:
with open('income.pickle', 'rb') as read_file:
income_df = pickle.load(read_file)
同样,当我返回income_df时,我得到以下输出:
系列([], dtype: float64)
这是一个空序列,我在尝试调用大多数序列方法时会出错。
如果有人知道解决这个问题,我全都听进去。提前致谢!
编辑:
这是我得出的解决方案:
with open('cleaned_df', 'wb') as to_write:
pickle.dump(df, to_write)
with open('cleaned_df','rb') as read_file:
df = pickle.load(read_file)
这比我预期的要简单得多
答:
酸洗通常用于存储原始数据,而不是传递 Pandas DataFrame 对象。当您尝试腌制它时,它只会存储顶级模块名称 Series。
1) 您只能将 DataFrame 中的数据写入 csv 文件。
# Write/read csv file using DataFrame object's "to_csv" method.
import pandas as pd
new_income_df.to_csv("mydata.csv")
new_income_df2 = pd.read_csv("mydata.csv")
2)如果您的数据可以作为函数保存在具有 *.py 名称的常规 python 模块中,则可以从 Jupyter 笔记本调用它。您也可以在更改内部值后重新加载函数。请参阅 autoreload ipynb 文档:https://ipython.org/ipython-doc/3/config/extensions/autoreload.html
# Saved as "mymodule1.py" (from notebook1.ipynb).
import pandas as pd
def funcdata():
new_income_df = pd.DataFrame(data=[100, 101])
return new_income_df
# notebook2.ipynb
%load_ext autoreload
%autoreload 2
import pandas as pd
import mymodule1.py
df2 = mymodule1.funcdata()
print(df2)
# Change data inside fucdata() in mymodule1.py and see if it changes here.
3) 您可以使用 %store 命令在 Jupyter 笔记本之间共享数据。
请参阅 src : https://www.dataquest.io/blog/jupyter-notebook-tips-tricks-shortcuts/
和: 在 IPython Notebooks 之间共享数据
# %store example, first Jupyter notebook.
from sklearn import datasets
dataset = datasets.load_iris()
%store dataset
# from a new Jupyter notebook read.
%store -r dataset
评论
使用这个:
movies = pd.read_pickle('cleaned_df')
加载腌制文件。
评论