【发布时间】: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