2017-10-19 12 views
-1

以下のテキストデータがあります。新しいvarコールを作成する必要があります。 正規表現を使用してください。次のコードを試したが、すべての行が「その他」となってしまった。Regex on DataFrameを使用してPythonを使用して新しい変数を作成するには

for pat in dt['Text']: 
    if re.search('Dropship',str(pat)): 
     dt['Recommend'] = 'DROPSHIP'  
    elif re.search('Dispatch',str(pat)): 
     dt['Recommend'] = 'DISPATCH' 
    elif re.search('Dispatch',str(pat)): 
     dt['Recommend'] = 'DISPATCH' 
    else: 
     dt['Recommend'] = 'OTHERS'  

私を助けてください。

apply

Data

答えて

0
recommend_list = [] 
for pat in dt['Text']: 
    if 'Dropship' in str(pat): 
     recomment_list.append('DROPSHIP') 
    elif 'Dispatch' in str(pat): 
     recomment_list.append('DISPATCH') 
    else: 
     recomment_list.append('OTHERS') 

dt['Recommend'] = recomment_list 
+0

このリンクは質問に答えるかもしれないが、ここでは答えの重要な部分が含まれており、参考のためにリンクを提供することをお勧めします。リンクされたページが変更された場合、リンクのみの回答は無効になります。 - [レビューの投稿](/レビュー/低品質の投稿/ 17673015) – Faraday

2

ワンライナー:

df['Recommend'] = df['Text'].apply(lambda x: 'DROPSHIP' if 'Dropship' in x else 'DISPATCH' if 'Dispatch' in x else 'OTHER') 
1

代わりのデータをループ、あなたは可能性があり、このようなオプションをループ:

replacements = {'Dropship': 'DROPSHIP', 'Dispatch': 'DISPATCH'} 
default_replacement = 'OTHERS' 

for pattern, replacement in replacements.items(): 
    items = dt['Text'].str.contains(pattern) 
    dt.loc[items, 'Recommend'] = replacement 

df['Recommend'].fillna(default_replacement, inplace=True) 
1

あなたの場合はチェックが増加すると、チェックを含む関数を作成する方が簡単かもしれません。

def get_recommendation(text): 
    if re.match('Dropship',str(text)): 
     return('DROPSHIP')  
    elif re.search('Dispatch',str(text)): 
     return('DISPATCH') 
    elif re.search('Dispatch',str(text)): 
     return('DISPATCH') 
    else: 
     return('OTHERS') 

あなたは、その関数を使用するようにapply()を使用することができます。

dt['Recommend'] = dt['Text'].apply(lambda x: get_recommendation(x)) 
関連する問題