有一堆数据集,我必须多次导入/预处理。
我正在做的是将所有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?
您还想解决其他效率低下的问题吗?
1条答案
按热度按时间voase2hg1#
TL;DR:
您是否尝试过
%run my_datasets.py
用于您的预期用途?而不是import
。详情:
如果你这样做是为了“多次导入/预处理”,你很可能不想使用import。
import
使用特殊的处理,这样它就不会浪费时间重新导入,如果你已经这样做了,那么在同一个活动会话中,相同命名代码的任何后续导入都将被忽略。因此,如果您在活动的notebook中更新file2.csv
,然后再次运行导入my_datasets.py
的import语句,则可能不会得到预期的更新后的dataset2
。如果你想在同一个内核中以交互方式运行代码
my_datasets.py
,这样它就可以使用你在笔记本中定义的内容,你的笔记本也可以使用它,你可以在笔记本的单元格中这样做:字符串
关于
%run
的魔术请注意此处描述的
-i
标志的使用。如果您不希望该脚本访问之前在notebook名称空间中运行的任何内容;但是,如果希望运行的代码定义可以在当前notebook中访问的变量(对象),可以简单地用途:
型
对于您的用例,这可能就足够了。
如果你确实需要对内存中当前的内容进行细粒度的控制,并且只加载某些内容,你可以在笔记本或笔记本中运行的脚本中进行控制,就像
juanpa.arrivillaga
建议的那样。您不会将所有100个调用都放在my_datasets.py
中读取,然后期望能够选择性地跳过一些。首先,您可以清除notebook代码中的对象,然后运行大对象的阅读以保持内存较低。您可以将小的放在my_datasets.py
中以安全地执行此操作。如果你确实想使用import,你可以利用Jupyter中重新加载模块的技巧,就像你在开发一样。