python 泡菜编码UTF-8问题

hjzp0vay  于 2023-01-08  发布在  Python
关注(0)|答案(1)|浏览(168)

我正在尝试将一个panda Dataframe pickle到我的本地目录中,这样我就可以在另一个jupyter笔记本上工作了,刚开始写的时候看起来很成功,但是当我尝试在一个新的jupyter笔记本上读的时候,读不成功。
当我打开似乎是我写的pickle文件时,文件的唯一内容是:
错误!/Users/.../income. pickle不是UTF-8编码保存被禁用。有关详细信息,请参阅控制台。
我也检查了,泡菜文件本身只有几千字节。
下面是我编写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)

同样,当我返回income_df时,会得到以下输出:
系列([],数据类型:浮动64)
这是一个空序列,当我试图调用它的大多数序列方法时,我会出错。
如果有人知道解决这个问题的方法,我洗耳恭听。提前感谢!
编辑:
这是我得出的解决方案:

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)

这比我想象的要简单得多

0h4hbjxa

0h4hbjxa1#

Pickling通常用于存储原始数据,而不是传递Pandas DataFrame对象。当您尝试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笔记本中调用它。你也可以在改变函数中的值后重新加载函数。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笔记本电脑之间共享数据。
参见源代码:https://www.dataquest.io/blog/jupyter-notebook-tips-tricks-shortcuts/
和:Share data between 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

相关问题