【问题标题】:Python - return value from dict if cell contains substringPython - 如果单元格包含子字符串,则从 dict 返回值
【发布时间】:2017-08-27 05:42:48
【问题描述】:

我正在使用 excel 文件,其中一列包含“描述”(=字符串,即“abc_123”),我需要根据描述创建类别。我检查了 Fuzzywuzzy 库,但它不太适合我的需求,因为描述可能很长,并且类别可以用一个词来描述,因此不匹配率很高。

我是如何在 excel 中做到的(区分大小写):

=IFERROR(INDEX($B$2:$B$50,MATCH(1,--NOT(NOT(FIND($A$2:$A$50,B2))),0)),"N/A")

问题是在 python 中,我的解决方案只返回完全匹配,我想返回部分匹配(如果可能,不区分大小写)。

df = pd.DataFrame({'col1': {0: 'a', 1: "b", 2: "abc"}, 'col2': {0: np.nan, 1: np.nan, 2: np.nan}})
di = {"a": "1", "b":"2"}

    col1    col2
0   a   NaN
1   b   NaN
2   abc NaN

df.loc[df.col1.isin(di), 'col2'] = df['col1'].map(di)

col1    col2
0   a   1
1   b   2
2   abc NaN

我希望 col2:2 填充“1”,因为它是第一个匹配项 (a)。

编辑: 字典 - dict{"Hosp":"Hospital", "emerg":"Hospital", "Fire":"Fire Department"}

我想要:

“医院紧急”返回“医院”

“Hospi_emrgncy。”返回“医院”

“医院紧急”返回“医院”

“底特律大火”回归“消防局”

【问题讨论】:

  • 对不起,您的问题不清楚。你能提供更多的样本数据和预期的输出吗?
  • 这听起来像是机器学习的工作。准备一个示例数据集,将其提供给分类算法,然后让它尝试对剩余的数据进行分类。一个好的起点是查看 scikit learn

标签: python pandas dictionary substring lookup


【解决方案1】:
for key, value in category_name.items():
    mask = np.column_stack([df['Description'].str.contains(key, na=False) for col in df])
    df2 = df.loc[mask.any(axis=1)]
    df2["Category"] = df2["Category"].fillna(value)
    df3 = df3.combine_first(df2)

终于找到了解决办法。绝不是完美的,但如果我有足够好的字典,这可以完成。

【讨论】:

    猜你喜欢
    • 2023-03-13
    • 2022-10-01
    • 2016-06-07
    • 1970-01-01
    • 2022-09-23
    • 1970-01-01
    • 1970-01-01
    • 2021-10-06
    • 1970-01-01
    相关资源
    最近更新 更多