Python Pickle编码utf-8问题

Python Pickle编码utf-8问题,python,encoding,utf-8,jupyter-notebook,pickle,Python,Encoding,Utf 8,Jupyter Notebook,Pickle,我正在尝试将pandas数据帧pickle到本地目录,以便在另一个jupyter笔记本中处理它。起初写操作似乎很成功,但在新的jupyter笔记本中尝试读取时,读取操作失败 当我打开看似已写入的pickle文件时,该文件的唯一内容是: 错误/Users/../income.pickle不是UTF-8编码的 保存已禁用。 有关更多详细信息,请参阅控制台 我也检查了,pickle文件本身只有几千字节 以下是我编写pickle的代码: 用open'income.pickle'、'wb',encodin

我正在尝试将pandas数据帧pickle到本地目录,以便在另一个jupyter笔记本中处理它。起初写操作似乎很成功,但在新的jupyter笔记本中尝试读取时,读取操作失败

当我打开看似已写入的pickle文件时,该文件的唯一内容是:

错误/Users/../income.pickle不是UTF-8编码的 保存已禁用。 有关更多详细信息,请参阅控制台

我也检查了,pickle文件本身只有几千字节

以下是我编写pickle的代码:

用open'income.pickle'、'wb',encoding='UTF-8'来写: pickle.dumpnew_income_df,写入 下面是我的阅读代码:

打开'income.pickle','rb'作为读取文件: income\u df=pickle.loadread\u文件 此外,当我返回收入时,我得到以下输出:

系列[],数据类型: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)

这比我预期的要简单得多

酸洗通常用于存储原始数据,而不是传递数据帧对象。在本例中,当您尝试对其进行pickle时,它将只存储顶级模块名Series

1您只能将数据帧中的数据写入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文档:

3您可以使用%store命令在Jupyter笔记本电脑之间共享数据。 见src: 以及:


CryinOutloud现在是2020年,Python没有任何可行的方法将结构化对象转储到不中断十进制数据的字符串中。使用Java这是最好的答案。

非常感谢!我可以用你给出的例子来解决我的问题。嗨,乔尔,太好了!我自己也是一个新手程序员。想知道你的解决方案吗?你可以编辑你的问题帖子来展示什么对你有效。其实解决方法很简单。我在上面编辑了我的帖子,想让你看看。很有趣。您似乎能够重新格式化数据帧对象,将其保存为pickle二进制对象。”我得试试。快乐编码:-对于未来的搜索者来说,即使Jupyter Notebook无法直接显示pickle文件内容并显示“Error”,也有可能成功写入对象!未禁用UTF-8编码保存。有关详细信息,请参阅控制台。请尝试取消勾选对象并检查它。你可能会发现这个物体完好无损。原来的海报在这方面很不走运,但这是另一个问题。
# 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.
# %store example, first Jupyter notebook.
from sklearn import datasets
dataset = datasets.load_iris()
%store dataset

# from a new Jupyter notebook read.
%store -r dataset