我有两个Pandas DataFrames形式的列表,每个列表都包含一列名称。现在,我想比较这些名称并返回出现在两个DataFrame中的名称列表。问题是我的解决方案太慢了,因为两个列表都有数千个条目。 现在,我想知道是否还有其他办法可以加快解决问题的速度。
我已经使用“ df.sort_values”按字母对我的熊猫数据帧进行了排序,以创建字母索引,以便第一个列表中以字母“ X”开头的名称将仅与相同的第一个名称进行比较第二个列表中的字母。
我怀疑程序运行如此缓慢的主要原因是我访问要比较的字段的方式。
我使用特定的比较功能来比较名称并通过df.at [i,'column_title']方法访问数据框元素。
编辑:请注意,此特定的比较功能比简单的==更复杂,因为我正在进行一种模糊字符串比较,以确保拼写稍有不同的名称仍被标记为匹配项。我使用whoswho库,该库返回的匹配率是0到100之间。一个简化的示例着重于我对熊猫数据框比较的慢速解决方案,如下所示:
for i in range(len(list1)):
for j in range(len(list2)):
# who.ratio returns a match rate between two strings
ratio = who.ratio(list1.at[i, 'name'], list2.at[j, 'name'])
if ratio > 75:
save(i,j) # stores values i and j in a result list
我还考虑过从熊猫切换到numpy,但我读到这可能会进一步放慢速度,因为大数据量时熊猫更快。
有人可以告诉我是否有一种更快的方法来访问pandas数组中的特定元素吗?还是一般来说有更快的方法通过两个pd数据帧运行自定义比较功能?
Edit2:拼写,其他信息。