我在名为 my_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
以此类推...
现在,我想合并所有数据框。我使用外部联接逻辑,因为我希望最终的数据框包括“链接”列内所有数据框中存在的所有可能的链接。
这样,我使用循环来迭代合并它们,但是我不断收到一条错误消息告诉我
MemoryError:
,没有更多信息。为了在循环中释放RAM,我将结果保存到一个pickle文件中,但这似乎也无济于事。我仍然遇到相同的错误。
这是我正在使用的代码:
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
答案 0 :(得分:1)
我认为您可以尝试使用pd.concat
来实现:
result = (pd.concat([my_dict[key].set_index('links') for key in filter_list],
axis=1,sort=False)
.fillna(0).reset_index())
result[result.columns[1:]] = result[result.columns[1:]].astype(int)
使用您的两个数据框A和B,它给出:
index A B
0 Q11@8.jpg 1 1
1 Q11@11.jpg 1 0
2 Q11@4.2.jpg 1 0
3 Q11@4.3.jpg 1 0
4 A11@21.jpg 0 1
5 Q11@42.jpg 0 1
6 C11@4.jpg 0 1