【发布时间】:2022-09-06 04:16:05
【问题描述】:
我有一个巨大的数据框(D1),它只是一列 ID(大约 700,000),我还有另一个数据框(D2),其中包含与人相关的数据,其中一个列代表和 ID。 我需要将 D2 的 ID 列中的每个单元格与 D1 列中的每个值进行比较。必须从 D2 中删除具有匹配 ID 的行。
这是我用来比较和删除的代码部分,但我认为我没有正确使用 drop 函数。由于数据帧太大,我的电脑或谷歌 colab 因内存不足而崩溃,我不得不将 D2 划分为较小的数据帧并将它们添加到字典(dataframe_collection)中,然后再次使用该字典将其每个迷你数据帧加入一个更大的并打印一个csv文件。 发生的事情是较小的数据帧总是空的,我能够识别两个数据帧中存在哪些 ID,哪些不存在。
times = math.ceil(D2.shape[0]/500)
print(times)
dataframe_collection = {}
for i in range(times):
dataframe_collection[i] = D2.iloc[i*500: (i*500)+500]
dataframe_collection[i] = dataframe_collection[i].drop(dataframe_collection[i][dataframe_collection[i]["ID"] == D1].index)
数据集示例:
data1 = ['23100100011930000021', '23100100011930000031','23100100011930000061','23100100011930000081','23100100011930000091','23100100011930000101','23100100011930000181']
D1 = pd.DataFrame(data1, columns=['ID'])
data2 = [['tom', '23100100011930000021', 'USA'], ['nick', '23100100011930000031', 'DEU'], ['juli', '23100100011930000061', 'USA'], ['charlie', '23100100011930000722', 'MEX']]
D2 = pd.DataFrame(data2, columns=['Name', 'Age', 'Country'])
在这种情况下,最后一个寄存器 ['charlie', '23100100011930000722', 'MEX'] 应留在最终数据帧中,其他寄存器应丢弃
【问题讨论】:
-
小数据集作为示例会很方便,但是,看起来您应该使用与此类似的解决方案:stackoverflow.com/a/37246977/8805842
-
@NoobVB 是的,它与那个问题非常相似。我尝试在 excel 上执行此操作,但它崩溃了,由于数据量过多,它甚至不允许我过滤单元格,这就是为什么我尝试用 python 解决它但无法这样做的原因。
标签: python pandas dataframe compare drop