【问题标题】:Does dataframe remain when console is terminated控制台终止时数据框是否保留
【发布时间】:2020-10-28 01:26:00
【问题描述】:

我创建了一个 Pandas 数据框:

scores = pd.DataFrame(
        {"batch_size" : list(range(64)),
         "learning_rate" : list(range(64)),
         "dropout_rate" : list(range(64)),
         "accuracies" : [[0]]*64,
         "loss" : [[0]]*64,
         "training_time" : list(range(64)),
         }, index = list(range(64)))

然后,我循环运行 64 个模型并将结果添加到列表中。

循环仍在进行中,我不希望它在我的截止日期之前完成。因此,我想终止控制台并继续使用迄今为止存储在scores 中的信息。但是,我只想在终止循环后仍然可以访问数据帧时这样做。

如果我在循环仍在运行时终止循环,我可以使用具有中间结果的数据框吗?

【问题讨论】:

  • 您打算如何终止循环?您是在循环运行时将 DF 保存到临时文件或其他文件中,还是只是在内存中?以后打算怎么访问 DF?
  • 它现在就在内存中。之后我想将其导出到 csv
  • 你应该看看pandas.to_csv函数:pandas.pydata.org/pandas-docs/stable/reference/api/…
  • 存储一个指向执行哪些模型的指针(1,2,3..)并将结果保存为一个,在获得所有结果后组装数据帧?

标签: python pandas loops for-loop terminate


【解决方案1】:
  1. 如果可能,我会优先考虑 pandas 方法而不是使用 for 循环,因为这样可以解决核心问题。更好的是,如果您能够将 for 循环更改为 pandas 方法,并且想要更快的执行速度,那么许多 pandas 方法也可以被称为dask 的大数据 python 库使用。这有点高级,但我在一个大型项目中处于类似的位置,dask 是一个很好的解决方案,但我花了一天左右的时间来适应这个库并将我的代码从 pandas 转换为 dask。

  2. 如果您只想保持代码原样并在 pandas 中执行此操作,那么我会考虑将数据帧分成块,如果它仍然需要永远处理:

    n = 100000
    scores_df_list = [scores[i:i+n] for i in range(0,scores.shape[0],n)]
    i=0
    for df in scores_df_list:
        i+=1
        #inefficient for loop code on large dataset...
        #inefficient for loop code on large dataset continued...
        df.to_csv(f'file{i}.csv')
    

从@ScottBoston 的回答中查看更多信息,如果有帮助,请点赞他的解决方案:Pandas - Slice Large Dataframe in Chunks:

【讨论】:

  • 这不是我的问题的确切答案,但感谢您的建议,因为我不知道 dask 库。此外,我正在进行网格搜索并将中间结果存储在我的数据框中。所以我认为 for 循环是这里最好的方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-27
  • 2017-07-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多