【问题标题】:Pandas string contains and replacePandas 字符串包含和替换
【发布时间】:2019-05-25 20:51:06
【问题描述】:

我有以下数据框

         A            B
0        France        United States of America
1        Italie        France
2        United Stats  Italy

我正在寻找一个函数,它可以(对于A 列中的每个单词)前 4 个字母,然后在 B 列中搜索这 4 个字母是否存在。现在,如果是这种情况,我想将 A 中的值替换为 B 中的相似值(相似的前 4 个字母)。

示例:A 列中的 Italie 一词,我必须取 Ital,然后在 B 中搜索是否可以找到。然后我想用类似的词Italy替换Italie

我尝试用str.contains 函数来做for

但仍然不能只取前 4 个字母。

预期输出:

         A                         B
0        France                   United States of America
1        Italy                    France
2        United Stats of America  Italy

为了总结,我正在寻找更正 A 列中的值,使其与 b 列中的值相似

【问题讨论】:

  • 这个需要先模糊匹配再使用map

标签: python string pandas text contains


【解决方案1】:

模糊匹配的解决方案 --fuzzywuzzy

from fuzzywuzzy import process

def fuzzyreturn(x):
    return [process.extract(x, df.B.values, limit=1)][0][0][0]


df.A.apply(fuzzyreturn)
Out[608]: 
0                      France
1                       Italy
2    United States of America
Name: A, dtype: object
df.A=df.A.apply(fuzzyreturn)

【讨论】:

  • 哇,你的fuzzyreturn函数效果很好,我不得不说我没有完全理解它是如何工作的,我快速搜索了fuzzywuzzy.process.extract但是我不明白[0]的意义[ 0][0]
  • @Math 只需提取没有 0 的结果你就会明白为什么我需要那么多 0 和 []
猜你喜欢
  • 2017-11-19
  • 1970-01-01
  • 2021-06-08
  • 2020-07-15
  • 1970-01-01
  • 2011-03-10
  • 2019-12-30
  • 1970-01-01
  • 2022-01-22
相关资源
最近更新 更多