【发布时间】:2021-06-11 14:45:21
【问题描述】:
我在从 fuzzymatcher 库执行 fuzzy_left_join 时观察到奇怪的行为。尝试加入两个df,左边一个有5217条记录,右边一个有8734条记录,best_match_score的所有记录是71条记录,这看起来很奇怪。为了获得更好的结果,我什至删除了所有数字,只留下字母字符用于连接列。在合并表中,右表的 id 列是NaN,这也是一个奇怪的结果。
左表 - 加入“amazon_s3_name”的列。第一项 - limonig
+------+---------+-------+-----------+------------------------------------+
| id | product | price | category | amazon_s3_name |
+------+---------+-------+-----------+------------------------------------+
| 1 | A | 1.49 | fruits | limonig |
| 8964 | B | 1.39 | beverages | studencajfuzelimonilimonetatrevaml |
| 9659 | C | 2.79 | beverages | studencajfuzelimonilimtreval |
+------+---------+-------+-----------+------------------------------------+
右表 - 连接列“amazon_s3_name” - 最后一项 - limoni
+------+----------------------------------------------------------------------------------------------------------------------------+--------------------------------------------+
| id | picture | amazon_s3_name |
+------+----------------------------------------------------------------------------------------------------------------------------+--------------------------------------------+
| 191 | https://s3.eu-central-1.amazonaws.com/groceries.pictures/images/AhmadCajLimonIDjindjifil20X2G.jpg | ahmadcajlimonidjindjifilxg |
| 192 | https://s3.eu-central-1.amazonaws.com/groceries.pictures/images/AhmadCajLimonIDjindjifil20X2G40g.jpg | ahmadcajlimonidjindjifilxgg |
| 204 | https://s3.eu-central-1.amazonaws.com/groceries.pictures/images/Ahmadcajlimonidjindjifil20x2g40g00051265.jpg | ahmadcajlimonidjindjifilxgg |
| 1608 | https://s3.eu-central-1.amazonaws.com/groceries.pictures/images/Cajstudenfuzetealimonilimonovatreva15lpet.jpg | cajstudenfuzetealimonilimonovatrevalpet |
| 4689 | https://s3.eu-central-1.amazonaws.com/groceries.pictures/images/Lesieursalatensosslimonimaslinovomaslo.jpg | lesieursalatensosslimonimaslinovomaslo |
| 4690 | https://s3.eu-central-1.amazonaws.com/groceries.pictures/images/Lesieursalatensosslimonimaslinovomaslo05l500ml01301150.jpg | lesieursalatensosslimonimaslinovomaslolml |
| 4723 | https://s3.eu-central-1.amazonaws.com/groceries.pictures/images/Limoni.jpg | limoni |
+------+----------------------------------------------------------------------------------------------------------------------------+--------------------------------------------+
合并表 - 正如我们在合并表中看到的 best_match_score 是 NaN
+----+------------------+-----------+------------+-------+----------+----------------------+------------+---------------------+-------------+----------------------+
| id | best_match_score | __id_left | __id_right | price | category | amazon_s3_name_left | image_left | amazon_s3_name_left | image_right | amazon_s3_name_right |
+----+------------------+-----------+------------+-------+----------+----------------------+------------+---------------------+-------------+----------------------+
| 0 | NaN | 0_left | None | 1.49 | Fruits | Limoni500g09700112 | NaN | limonig | NaN | NaN |
| 2 | NaN | 2_left | None | 1.69 | Bio | Morkovi1kgbr09700132 | NaN | morkovikgbr | NaN | NaN |
+----+------------------+-----------+------------+-------+----------+----------------------+------------+---------------------+-------------+----------------------+
【问题讨论】:
-
@RJAdriaansen,我添加了示例。
-
Fuzzymatcher 仅在有一些共同标记的情况下才真正起作用。在这种情况下,令牌将夹在
/上,但它会尝试将limonig与AhmadCajLimonIDjindjifil20X2G匹配,因此将找不到任何东西。 RJ 的回答看起来很明智。或者,您需要以某种方式将网址拆分为更小的标记 -
@RobinL 为什么模糊匹配器会查找未指定为要合并的列的列?
-
啊,我的错。我看错了专栏。相同的推理仍然适用 - 当fuzzyfinder 尝试查找潜在匹配时,它假定输入字符串可以被标记化并且至少有一个标记匹配。
标签: python python-3.x pandas fuzzy-search