各位同事,下午好!
出现了以下任务:有一个很大的数据框,其中包括客户的全名和他通过的程序。我需要比较df_1和df_2,从而识别那些在新年之前来的人和那些在新年之后又来的人。
我尝试使用#s1 = pd.merge(df_1, df_2, how='inner', on=['Отбор:'])
,但 collab 只是给出了有关超出 RAM 量的错误。
下面是一个示例数据框。
Indx Отбор:
201 Павловский Александр Танцыс
202 Штраф за задержку в клубе
203 Посещение 2 часа
204 Посещение 2 часа (Выходные дни)
205 Посещение 3 часа (Выходные дни)
206 Татинцян Оганес Валерьевич
207 Штраф за задержку в клубе
208 Посещение 2 часа
209 Посещение 1 час
210 Посещение 1 час (Выходные дни)
211 Посещение 2 часа (Выходные дни)
212 Шмелев Владислав
213 Штраф за задержку в клубе
214 Посещение 2 часа (Выходные дни)
215 Посещение 3 часа (Выходные дни)
216 Агафонов Алексей Владимирович
217 Штраф за задержку в клубе
218 Посещение 1 час
219 Посещение 1 час (Выходные дни)
220 Посещение 2 часа
221 Афанасьев Николай Максимович
222 Штраф за задержку в клубе
223 Посещение 1 час
224 Посещение 1 час (Выходные дни)
225 Иванова Мария Александровна
226 Штраф за задержку в клубе
227 Посещение 1 час
228 Посещение 1 час (Выходные дни)
229 Посещение 2 часа
一般来说,我需要在两个数据框中找到全名的匹配项。数据帧没有什么不同,只是时间段不同。
我想问题出在下面。您的数据框,更准确地说,您尝试合并的一列包含大量相同的值(服务行),这些值显然包含在第一个和第二个数据框中。在这种情况下,行为的逻辑
pd.merge
是这样的,它将这些重复值添加到结果数据帧中,数量为 m*n,其中 m 和 n 是第一个和第二个数据帧中相同值的重复次数。因此,您生成的数据帧将扩展到令人难以置信的大小,并且无法容纳任何内存。因此,您可以采取以下步骤来解决该问题:
1.清除服务线的两个数据框:
在这里,我们需要确保我们不会被Anton Petrovich Fine(-kin|-kov)抓住
2.1之后,按
merge
使用方法使用。或者
2.2从两列 ['Selection:'] 建立集合并获取它们的交集:
3.如果您的数据集如此之大,以至于清除数据帧仍然无济于事(这将节省大量内存)并且您仍然会溢出,那么您所要做的就是将所有数据分割成切片(以简单的情况下,只有一个数据帧,在复杂的情况下 - 两者)并在循环中进行分段比较。
但如果您只需要全名列表,而不是全名+官方信息,所有这些提示都是相关的。
.unique()
。然后,正如您在评论中已经建议的那样,您可以从此列表中创建一个集合,并根据您的任务,对这些集合进行相交、添加、减去...如果您按照正确的顺序执行所有操作,所有这些都将使您节省大量内存。
更具体地说,对于代码,如果您提供可重现的数据示例,我或其他人都可以回答,即 您可以运行并获取与您的结构相似的数据帧的数据文件或代码。