【发布时间】:2020-01-15 09:13:09
【问题描述】:
假设我在一个 jupyter notebook 中创建了一个数据框:
在 notebook_1 中:
df = pd.DataFrame(np.random.randn(100, 4), columns=list('ABCD'))
现在将df 移动到另一个笔记本中以便我可以在那里使用它的最佳(最简单、最快、最可靠……)方法是什么?
在 notebook_2 中:
df = ... #do something here to load the data from the df in notebook_1
#and now use the df further on
我想出了以下所有方法(可能是最后一种方法除外):
- 导出到文件,然后使用 pandas IO tools 之一导入 - 对于非常大的数据帧可能是一个很好的解决方案,但否则看起来不必要地复杂
- 使用 pd.DataFrame.to_clipboard 和 pd.DataFrame.read_clipboard - 对于小型数据帧看起来不错,但根据this answer,它不是 100% 可靠的,而且它可能不适用于较大的数据帧(? ),另外,如果我在将剪贴板内容替换为其他内容后重新运行 notebook_2,它将不再工作
- 使用 pd.DataFrame.to_json 和 pd.DataFrame.read_json 与
orient = 'table'和path_or_buf=None并复制粘贴输出 - 适用于我的情况(相对较小的数据框) - 好处是我可以直接在 notebook_2 中以纯文本形式查看导入的数据,这样一旦我第一次复制数据,笔记本就会变得独立 -
copy-paste the whole cell 包含
df的输出??? - 我无法测试它是复制数据还是只复制代码 - 复制粘贴对我根本不起作用。但我对此表示怀疑。
编辑 - cmets 或答案中提到的选项:
- Chris 提到的 IPython %store magic - 真的很简单很好,唯一的缺点是 notebook_2 不是独立的
但我想知道是否还有其他可能的方法以及优点、缺点、警告......
我对洞察力、比较等更感兴趣,而不仅仅是一种方法(除非有一种显然是最好的方法,在所有情况下都能完美运行并且没有缺点) .
谢谢。
【问题讨论】:
-
我解决这个问题的方法是将 df 酸洗到磁盘,然后在另一个笔记本中我会在开始时加载它。这允许我启动/停止 jupyter(用例在我自己的计算机中),甚至有版本控制,允许我使用以前版本的数据。我选择 pickle 是因为文件不大(最大 15 MB),它都在我的电脑中,我也保存了其他 python 对象。 Pickle 是我的解决方案,但它既不是 most secure,也不是 performant solution。
-
这能回答你的问题吗? Share data between IPython Notebooks
-
@Chris:链接中提到的 %store 魔法是一个我不知道的选项(非常简洁,至少在某些情况下)。谢谢你。然而,这并不能完全回答这个问题。例如它的缺点是 notebook_2 不是独立的(取决于 IPython 数据库的状态)——在某些情况下这可能是一个问题。
标签: python pandas dataframe jupyter-notebook copy-paste