2017-09-07 20 views
0

以下は、カテゴリリストとデータセットから一致する値を抽出するためのコードです。次の結果得データフレーム列からの文字の削除

matches= token.apply(lambda x: pd.Series(x).str.extractall("|".join(["({})".format(cat) for cat in Categories.HealthCare]))) 
match_list= [[m for m in match.values.ravel() if isinstance(m, str)] for match in matches] 
match_df = pd.DataFrame({"Hc1":match_list}) 

def match_health(row): 
    categories = [] 

    for bigram in row.bigram: 
     joined = ' '.join(bigram) 
     if joined in HealthCare: 
      categories.append(joined) 
    for trigram in row.trigram: 
     joined = ' '.join(trigram) 
     if joined in HealthCare: 
      categories.append(joined) 

    return categories 

match_df['Hc2'] = df.apply(match_health, axis=1) 
match_df['HealthCare'] = match_df[match_df.columns[[0,1]]].apply(lambda x: ','.join(x.dropna().astype(str)),axis=1) 

Hc1     Hc2       HealthCare 
0 []     []       [],[] 
1 [Sauna, Jacuzzi] [Health Club, Steam Room] ['Sauna', 'Jacuzzi'],['Health Club', 'Steam Ro... 
2 [Sauna, Jacuzzi] [Health Club, Steam Room] ['Sauna', 'Jacuzzi'],['Health Club', 'Steam Ro... 
3 [Sauna, Jacuzzi] [Health Club, Steam Room] ['Sauna', 'Jacuzzi'],['Health Club', 'Steam Ro... 

タイプ(match_df)を

pandas.core.frame.DataFrame 

しかし、私の出力は '[]' なしでなければなりません - 角括弧や単一引用符の周り文字列:

Hc1     Hc2       HealthCare 
0             
1 Sauna, Jacuzzi Health Club, Steam Room Sauna,Jacuzzi,Health Club,Steam Ro... 
2 Sauna, Jacuzzi Health Club, Steam Room Sauna,Jacuzzi,Health Club,Steam Ro... 
3 Sauna, Jacuzzi Health Club, Steam Room Sauna,Jacuzzi,Health Club,Steam Ro... 

助けが必要です。

+1

はそれだけで[]と '空白で置き換えるか、単にそれらを除去するのに十分ではないでしょうか? – bukart

+0

はい、コンマ区切りに置き換えても、仕事をします –

+0

match_df ['HealthCare'] = match_df ['HealthCare'] map(lambda x:x.replace( '['、 '')。replace( ']' 、 '')。replace( "'"、' '))これは動作しますが、データフレーム列に対してのみ有効です。一度にデータフレーム全体に適用する方法を知っていますか? –

答えて

1

あなたは.str.replaceを呼び出すことができます。

match_df['HealthCare'] = match_df['HealthCare']\ 
          .astype(str).str.replace(r"[\[\]']", '') 
+0

私はそれを試しましたが、失敗しました。 –

+0

@RajithaNaikなぜそれが不成功に終わったのですか?(リスト 'オブジェクトは'翻訳 ''属性 '変換' '、インデックス' Hc1で発生しました ')属性がありません。 ?それが私のために働くなら、それはあなたのために働くことができます。 –

+0

私はmaketransを使っていましたが、最初にこのエラーがありました。文字列からインポートした後でもmaketransという名前を見つけることができません。 'list'オブジェクトに 'translate'という属性はありません。おそらく私のコードでこれらの関数をどのように適用するのかは不明です。 –

0
match_df['HealthCare'] = match_df['HealthCare'].map(lambda x: x.replace('[','').replace(']','').replace("'",'')) 

これは、すべての角括弧や単一引用符を交換して動作します。

O/P:

 HealthCare 
0             
1 Sauna,Jacuzzi,Health Club,Steam Ro... 
2 Sauna,Jacuzzi,Health Club,Steam Ro... 
3 Sauna,Jacuzzi,Health Club,Steam Ro... 
関連する問題