【发布时间】:2017-08-23 04:35:48
【问题描述】:
我有一本包含 500 个 DateFrame 的字典。每个数据框都有列 'date' 、'num_patients'。我将模型应用于字典中的所有数据帧,但由于字典中的数据量很大,Python 内核崩溃。
prediction_all = {}
for key, value in dict.items():
model = Prophet(holidays = holidays).fit(value)
future = model.make_future_dataframe(periods = 365)
forecast = model.predict(future)
prediction_all[key] = forecast.tail()
所以,我对字典进行了子集化,并将模型应用于每个子集。
dict1 = {k: dict[k] for k in sorted(dict.keys())[:50]}
prediction_dict1 = {}
for key, value in dict1.items():
model = Prophet(holidays = holidays).fit(value)
future = model.make_future_dataframe(periods = 365)
forecast = model.predict(future)
prediction_dict1[key] = forecast.tail()
dict2 = {k: dict[k] for k in sorted(dict.keys())[50:100]}
prediction_dict2 = {}
for key, value in dict2.items():
model = Prophet(holidays = holidays).fit(value)
future = model.make_future_dataframe(periods = 365)
forecast = model.predict(future)
prediction_dict2[key] = forecast.tail()
但是我需要运行上面的代码 10 次,因为我有 500 个 DataFrame(10 个子集)。有没有更有效的方法来做到这一点?
【问题讨论】:
-
为什么不把它放在一个循环中呢?这意味着“我首先对字典进行子集化以避免 Python 内核因大数据而崩溃”?您是否出于某种原因反复对键进行排序?
-
现在您正在为字典中的每个元素拟合一个单独的模型。这是你想要的吗?
-
50*10 个项目不会和 500 个占用相同的内存量吗?您必须处理和转储中间字典。
-
@pvg 抱歉,我没有清楚地表达我的问题。我已经编辑了我的帖子以使其更清晰。当我一次将模型应用于所有 500 个数据帧时,内核死了。这就是为什么我对字典进行子集化,然后每次将模型应用于 50 个数据帧。
-
@Kewl 谢谢你的提问。我为字典中的每个元素/值拟合相同的模型。
标签: python performance pandas dictionary for-loop