我有一个包含500个DateFrames的字典。每个数据框都有'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个DataFrames(10个子集)。有没有更有效的方法来做到这一点?
答案 0 :(得分:3)
立即改进之处是删除 sorted()和切片步骤,并将其替换为heapq.nsmallest(),这将进行更少的比较。此外,.keys()
不是必需的,因为默认情况下,dicts会自动迭代它们的键。
替换:
dict1 = {k: dict[k] for k in sorted(dict.keys())[:50]}
dict2 = {k: dict[k] for k in sorted(dict.keys())[50:100]}
使用:
lowest_keys = heapq.nsmallest(100, dict)
dict1 = {k : dict[k] for k in lowest_keys[:50]}
dict2 = {k : dict[k] for k in lowest_keys[50:100]}
代码中的大型for循环看起来只需要.values()
而不是.items()
,因为 key 似乎没有被使用。