2017-12-20 2 views
1

Ich habe einen Pandas Datenrahmen, wo eine der Spalten eine Textbeschreibungszeichenfolge ist. Ich muss eine neue Spalte erstellen, die angibt, ob einer der Strings aus einer Liste in der Textbeschreibung enthalten ist.Suche über Textspalte in Pandas Datenrahmen ohne Schleife

df = pd.DataFrame({'Description': ['2 Bedroom/1.5 Bathroom end unit Townhouse. 
Available now!', 'Very spacious studio apartment available', ' Two bedroom, 1 
bathroom condominium, superbly located in downtown']}) 

list_ = ['unit', 'apartment'] 

Dann sollte das Ergebnis

         Description in list 
0 2 Bedroom/1.5 Bathroom end unit Townhouse. Av... True 
1   Very spacious studio apartment available True 
2 Two bedroom, 1 bathroom condominium, superbly... False 

sein ich es auf diese Weise eingestellt

for i in df.index.values: 
    df.loc[i,'in list'] = any(w in df.loc[i,'Description'] for w in list_) 

Aber mit einem großen Daten tun können, dauert es länger, als ich möchte.

Antwort

2

von str.contains

list_ = ['unit', 'apartment'] 
df.Description.str.contains('|'.join(list_)) 
Out[724]: 
0  True 
1  True 
2 False 
Name: Description, dtype: bool 
1

np.char.find using -

v = df.Description.values.astype('U')[:, None] 
df['in list'] = (np.char.find(v, list_) > 0).any(1) 

df 

             Description in list 
0 2 Bedroom/1.5 Bathroom end unit Townhouse. Av...  True 
1   Very spacious studio apartment available  True 
2 Two bedroom, 1 bathroom condominium, superbly... False 
+0

Lernen Sie neue Sache: -) – Wen

+1

@Wen Prost! Es ist interessant zu wissen, aber ich denke, es ist langsamer als 'str.contains'. –

Verwandte Themen