2017-04-02 46 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) 

終於找到了解決方案,以恢復「消防局」。絕不是完美的,但是如果我有足夠好的字典,這就完成了這項工作。

相關問題