通过模糊匹配规范熊猫中的单个字符串列

时间:2019-03-27 20:28:41

标签: pandas data-cleaning fuzzy-search

我有一个Pandas DataFrame,其中包含使用Google Cloud的自然语言API(https://cloud.google.com/natural-language/docs/analyzing-entity-sentiment)的实体情感的结果。我在一组论文中运行了实体情感,并且想要比较各种论文如何看待各种实体。但是,由于各篇论文对组织的引用方式存在细微差异,因此 entity_name 列包含重复项。我想用一个版本替换每个实体名称,以便可以比较跨论文的情感分析。

以下是DataFrame外观的示例:

entity_name                paper_name    score    magnitude
Dept. of Commerce          paper_1.pdf   0.67     0.13
Department of Commerce     paper_2.pdf   0.42     0.21
US Department of Commerce  paper_3.pdf   0.07     0.15

例如,我想找到所有涉及“商务部”的内容,因此我可以在各种论文中比较该实体的情感评分。这不是一个大的DataFrame(少于10万行),因此最快/最理想的答案就不用担心了。

我尝试使用Python中的Fuzzywuzzy库对名称进行模糊匹配。我使用 entity_name 列,并使用唯一值制作了两个单独的Numpy数组

names_1 = df.entity_name.unique()
names_2 = df.entity_name.unique()

然后我对两列中的所有对进行模糊匹配。问题是我仍然有重复。这是匹配的DataFrame外观的一个示例

name_1                      name_2                      match_ratio
Dept. of Commerce           Department of Commerce      82
Department of Commerce      Dept. of Commerce           82
US Department of Commerce   Department of Commerce      100
Department of Commerce      US Department of Commerce   100
Dept. of Commerce           US Department of Commerce   82
US Department of Commerce   Dept. of Commerce           82

因此,总而言之,我正在寻找一种用一个版本(无论哪个版本)替换“商务部”所有变体的方法,因此我可以比较各篇论文的情感评分。我已经找到了解决方案,其中涉及将两个DataFrame进行模糊匹配合并,而其他解决方案则涉及对同一DataFrame中的两个独立列进行模糊匹配,但是到目前为止,还没有找到一种标准化DataFrame中单个String列的方法。

0 个答案:

没有答案