python - 在 recordlinkage 库中检索匹配的记录 ID

标签 python record-linkage

我正在尝试这个例子:https://recordlinkage.readthedocs.io/en/latest/notebooks/data_deduplication.html

以下是代码片段:

import recordlinkage
from recordlinkage.datasets import load_febrl1

dfA = load_febrl1()

# Indexation step
indexer = recordlinkage.Index()
indexer.block(left_on='given_name')
candidate_links = indexer.index(dfA)

compare_cl = recordlinkage.Compare()

compare_cl.exact('given_name', 'given_name', label='given_name')
compare_cl.string('surname', 'surname', method='jarowinkler', threshold=0.85, label='surname')
compare_cl.exact('date_of_birth', 'date_of_birth', label='date_of_birth')
compare_cl.exact('suburb', 'suburb', label='suburb')
compare_cl.exact('state', 'state', label='state')
compare_cl.string('address_1', 'address_1', threshold=0.85, 
label='address_1')

features = compare_cl.compute(candidate_links, dfA)
matches = features[features.sum(axis=1) > 3]
print(len(matches))

我现在想单独打印已匹配的record_id。我尝试列出“matches”的列名,但record_id不是其中的一部分,而且我似乎无法找到一种方法来获取完成了(我只想要单独的 record_ids)

有没有办法检索 record_ids,并且可以单独打印它或将其存储为列表或数组?

最佳答案

不要忘记 Pandas 数据框除了数据列之外还有一个“索引”。通常这是整数或字符串的单个“额外”列,但更复杂的索引是可能的,例如由多个列组成的“多索引”。

如果您print(matches.head()),您就可以看到这一点。前两列的名称略有偏移,因为它们不是数据列;它们是索引本身中的列。该数据帧索引实际上是一个包含两列的多重索引:rec_id_1rec_id_2

load_febrl 的结果将记录 ID 编码为 dfA 的索引。 Compare.compute 保留输入数据的索引:您始终可以期望原始数据中的索引被保留为多索引。

可以使用DataFrame.index属性访问数据帧本身的索引。这将返回 Index object (其中 MultiIndex is a subclass )可以依次转换如下:

  • Index.tolist():转换为其元素的列表MultiIndex 成为 tuplelist
  • Index.to_series():转换为其元素的SeriesMultiIndex 成为 tupleSeries
  • Index.values:以 NumPy ndarray 形式访问底层数据; MultiIndex 成为 tuplendarray
  • Index.to_frame():转换为DataFrame,其中索引列作为数据帧列

因此,您可以使用 matches.index 快速访问记录 ID,或使用 matches.tolist() 将它们导出到列表。

您还可以使用 matches.reset_index() 将索引列转回常规数据列。

关于python - 在 recordlinkage 库中检索匹配的记录 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52393227/

相关文章:

python - 如果不使用标准定标器,则会出现内存错误

MySQL数据匹配: better options?

Python去重记录——dedupe

machine-learning - 自动文本/模糊匹配的最佳机器学习方法

python - 无法解释日期正则表达式

python - 如何提高 OpenCV cv2.VideoCapture(0).read() 的性能

algorithm - 多列信息的模糊记录匹配

sql - 关于重复数据删除软件的建议?

python - 使用 django.db 时如何将原始 SQL 与 ORM API 混合使用?

Python Pandas : type error in groupby