2017-04-02 7 views
-2

私は1つの列に「説明」(=文字列「abc_123」)が含まれているExcelファイルを使用しています。私はFuzzywuzzy libをチェックしましたが、記述がかなり長くなる可能性があり、カテゴリが1つの単語で記述できるため、ミスマッチ率がかなり高いため、私のニーズにはあまり適していません。Python - セルにサブ文字列が含まれている場合のdictからの戻り値

私は(大文字と小文字を区別)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に最初の一致(a)が設定されているため、col2:2に「1」を入力します。

編集: 辞書 - 辞書{ "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) 

は最後に解決策を見つけました。決して完璧ではありませんが、十分な辞書があれば、これは仕事です。

関連する問題