2017-04-02 47 views
-2

我正在使用excel文件,其中一列包含“说明”(=字符串即“abc_123”),我需要根据说明创建类别。我检查了Fuzzywuzzy lib,但它不太适合我的需要,因为描述可能很长,并且类别可以用一个词来描述,因此不匹配率非常高。Python - 如果单元格包含子字符串,则返回值来自词典

我怎么做的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)。

编辑: 字典 - 字典{ “HOSP”: “医院”, “EMERG”: “医院”, “火”: “消防局”}

我想:

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

”Hospi_emrgncy“。返回“医院”

“Hopsital紧急”返回“医院”

“火在底特律”

+0

很抱歉,您的问题不清楚。你能提供更多的样本数据和预期的输出吗? –

+0

这听起来像是机器学习的工作。准备一个数据集的例子,将其提供给分类算法,然后让它尝试对剩余数据进行分类。 一个好的起点是看scikit学习 –

回答

0
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) 

终于找到了解决方案,以恢复“消防局”。绝不是完美的,但是如果我有足够好的字典,这就完成了这项工作。

相关问题