pandas 导入模块中读取的文件是否保存在Jupyter Notebook的内存中?

blmhpbnm  于 2023-08-01  发布在  其他
关注(0)|答案(1)|浏览(156)

有一堆数据集,我必须多次导入/预处理。
我正在做的是将所有pd.read_csv()放在一个my_datasets.py文件中,如下所示:

# my_datasets.py

import pandas as pd

dataset1 = pd.read_csv('file1.csv')
dataset2 = pd.read_csv('file2.csv')
dataset3 = pd.read_csv('file3.csv')

字符串
然后,每当我需要一些数据时,我只需从Jupyter Notebook导入这个模块。
当我在EDA.ipynb上执行此操作时,我是否将dataset 1、2、3存储在RAM内存中,以便每次调用my_datasets.dataset1时不会产生文件IO?
您还想解决其他效率低下的问题吗?

voase2hg

voase2hg1#

TL;DR:
您是否尝试过%run my_datasets.py用于您的预期用途?而不是import
详情:
如果你这样做是为了“多次导入/预处理”,你很可能不想使用import。import使用特殊的处理,这样它就不会浪费时间重新导入,如果你已经这样做了,那么在同一个活动会话中,相同命名代码的任何后续导入都将被忽略。因此,如果您在活动的notebook中更新file2.csv,然后再次运行导入my_datasets.py的import语句,则可能不会得到预期的更新后的dataset2
如果你想在同一个内核中以交互方式运行代码my_datasets.py,这样它就可以使用你在笔记本中定义的内容,你的笔记本也可以使用它,你可以在笔记本的单元格中这样做:

%run -i my_datasets.py

字符串
关于%run的魔术
请注意此处描述的-i标志的使用。
如果您不希望该脚本访问之前在notebook名称空间中运行的任何内容;但是,如果希望运行的代码定义可以在当前notebook中访问的变量(对象),可以简单地用途:

%run my_datasets.py


对于您的用例,这可能就足够了。
如果你确实需要对内存中当前的内容进行细粒度的控制,并且只加载某些内容,你可以在笔记本或笔记本中运行的脚本中进行控制,就像juanpa.arrivillaga建议的那样。您不会将所有100个调用都放在my_datasets.py中读取,然后期望能够选择性地跳过一些。首先,您可以清除notebook代码中的对象,然后运行大对象的阅读以保持内存较低。您可以将小的放在my_datasets.py中以安全地执行此操作。
如果你确实想使用import,你可以利用Jupyter中重新加载模块的技巧,就像你在开发一样。

相关问题