【问题标题】:Avoid reloading data each time you want to work on it with Python避免每次要使用 Python 处理数据时重新加载数据
【发布时间】:2017-08-22 13:26:12
【问题描述】:

我有一个永远不会改变的大型数据集(我从不直接修改它)。我从 pandas 开始阅读

dataset = pandas.read_csv(filepath)

然后我做一些数据分析。初始文件加载大约需要 10 秒,我目前每次在数据分析部分更改某些内容时都会重新运行它。如何一劳永逸地加载数据并只运行分析部分?

【问题讨论】:

  • 您可以探索 iPython 之类的环境,这些环境具有类似于 MATLAB 的类似工作区的功能。
  • 标准库中有一个您可能会发现有用的函数:importlib.reload 重新加载以前导入的模块。但是 Python 的版本在这里很重要:这个函数在 Python 2.x 系列的更高版本中,在 V3.x 中被删除了一段时间,在 3.4 中又回来了。检查文档以了解您使用的任何版本。

标签: python pandas


【解决方案1】:

这个问题的答案在一定程度上取决于您尚未分享的细节。可能最好的方法是对您正在构建的最终数据结构进行序列化。

创建一个读取csv 并构建您感兴趣的数据结构的方法。构建后,使用pickle 输出结构。然后,在程序加载时从 pickle 中解压数据结构。

我假设这里耗时的部分是您一遍又一遍地启动程序。如果程序一直在运行,那么您应该将数据结构保存在活动内存中的集中位置。这里的幼稚方法是全局的,您不应该这样做,我仅出于概念目的而提及。

【讨论】:

  • 我只是在数据的探索阶段。我正在运行汇总统计、一些提取、绘图等。随着想法的出现,我正在逐步执行此操作。我只是不想每次尝试新事物时都重新加载整个数据。我想要一些类似 Matlab 的行为:读取并永久保存数据,然后在其上运行任何命令。
  • 如果您只是在运行 python 会话而不是构建程序,请查看@John Gordon 的答案。如果您正在围绕一个需要时间构建的静态数据结构构建程序,那么与一遍又一遍地构建它相比,反序列化已经构建的结构将为您节省大量时间。
【解决方案2】:

在交互式 Python 会话中,读取数据集:

>>> dataset = pandas.read_csv(filepath)

然后,无论您在哪里编写 Python 代码(在单独的窗口中,或在 IDE 中,或任何地方),创建您的数据分析函数并将其保存在自己的 Python 模块中。

在交互会话中导入并运行:

>>> from module1 import analysis1
>>> results = analysis1(dataset)

检查结果,决定需要进行哪些更改,创建一个新的单独 python 模块,然后运行它:

>>> from module2 import analysis2
>>> results = analysis2(dataset)

继续这样直到你完成。

【讨论】:

    猜你喜欢
    • 2021-12-16
    • 2019-12-11
    • 1970-01-01
    • 2021-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-17
    • 1970-01-01
    相关资源
    最近更新 更多