【发布时间】:2017-04-15 10:12:48
【问题描述】:
我有两个数据框。一个包含 33765 家公司。另一个包含 358839 家公司。我想使用模糊匹配找到两者之间的匹配。因为记录数量太多,我试图根据公司名称的第一个字母分解两个数据框的记录。 例如:对于所有以字母“A”开头的公司,第一个数据框有 2600 条记录,第二个有 25000 条记录。我正在实现它们之间的完全合并,然后应用模糊匹配来获得所有模糊值超过 95 的公司。 这仍然不起作用,因为记录数仍然太高而无法在它们之间执行完全合并然后实现模糊。每次我执行这些操作时,内核都会死掉。当两个帧中的记录数都是 4 位数时,同样的方法工作得很好。 另外,建议是否有办法为所有字母“A”到“Z”自动执行此操作,而不是手动运行每个字母的代码(不会使内核死亡)。
这是我的代码:
c='A'
df1 = df1[df1.companyName.str[0] == c ].copy()
df2 = df2[df2.companyName.str[0] == c].copy()
df1['Join'] =1
df2['Join'] =1
df3 = pd.merge(df1,df2, left_on='Join',right_on='Join')
df3['Fuzz'] = df3.apply(lambda x: fuzz.ratio(x['companyName_x'], x['companyName_y']) , axis=1)
df3.sort_values(['companyName_x','Fuzz'],ascending=False, inplace=True)
df4 = df3.groupby('companyName_x',as_index=False).first()
df5=df4[df4.Fuzz>=95]
【问题讨论】:
-
为什么你的内核会死掉?你有多少内存,你的内存用完了吗?您能否在问题中包含
df1.info(verbose=True, memory_usage=True)和df1.info(verbose=True, memory_usage=True)的输出? -
我不知道为什么,但这并没有显示任何输出。
标签: python pandas fuzzy-comparison