我正在尝试将 pandas 数据框腌制到本地目录,以便我可以在另一个 jupyter 笔记本中处理它。写入一开始似乎成功,但当尝试在新的 jupyter 笔记本中读取它时,读取不成功。
当我打开我似乎已经编写的pickle文件时,该文件的唯一内容是:
错误! /Users/.../venue.pickle 不是 UTF-8 编码 保存已禁用。 请参阅控制台了解更多详细信息。
我也查了一下,pickle 文件本身只有几千字节。
这是我编写pickle的代码:
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)
当我返回收入_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)
比我想象的要简单得多
Pickling 一般用于存储原始数据,而不是传递 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) 如果您的数据可以作为函数保存在常规 python 模块中,名称为 *.py,则可以从 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 Notebook 之间共享数据。
请参阅源代码:https://www.dataquest.io/blog/jupyter-notebook-tips-tricks-shortcuts/
并且:在 IPython Notebook 之间共享数据
# %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')
加载腌制文件。