【发布时间】:2018-08-08 00:41:13
【问题描述】:
我有一些 dataframes 存储在一个名为 my_dict 的 dict 中。 dict 的键存储在一个名为 filter_list 的列表中。
filter_list = ["A", "B", "C", ...]
my_dict[A] 给我以下结果:
links A
0 Q11@8.jpg 1
1 Q11@11.jpg 1
2 Q11@4.2.jpg 1
3 Q11@4.3.jpg 1
my_dict[B] 给我以下结果:
links B
0 Q11@8.jpg 1
1 A11@21.jpg 1
2 Q11@42.jpg 1
3 C11@4.jpg 1
等等……
现在我想将所有数据框合并在一起。我正在使用外连接逻辑,因为我希望我的最终数据帧包含所有可能的链接,这些链接存在于“链接”列内的所有数据帧中。
因此,我使用循环迭代地合并它们,但我不断收到一条错误消息告诉我
内存错误:
没有更多信息。为了在循环期间释放 RAM,我将结果保存到一个泡菜文件中,但这似乎也无济于事。我仍然得到同样的错误。
这是我正在使用的代码:
for index in tqdm(range(2,len(filter_list))):
try:
result = pd.read_pickle("result.pkl")
except:
pass
if index == 2:
result = pd.merge(my_data[filter_list[0]], my_data[filter_list[1]], on="links", how="outer")
result = pd.merge(result , my_data[filter_list[index]], on="links", how="outer")
result.fillna(0, inplace=True)
result[result.columns[1:]] = result[result.columns[1:]].astype(int)
result.to_pickle("result.pkl")
del result
【问题讨论】:
-
不会 "pd.concat([v for k,v in my_dict.items() if k in filter_list])" 完全达到你想要的效果