[英]python - pandas: creating a new dataframe with a list of keywords
我有一個 dataframe 的新聞標題,如下所示:
df = pd.DataFrame({'texto': ['El Hubble registró imágenes de una "mariposa interestelar"',
'Con su Audi atropelló y mató a una pareja: lo juzgan y podrían darle 25 años',
'Clarín cumplió 70 años y lo celebró con su personal',
'A diez años de Katrina, Obama visitó Nueva Orleans y celebró la recuperación',
'La oposición volvió a juntarse y pidió la boleta única electrónica en octubre',
'Hallan a casi 50 “sin papeles” muertos en un camión en Austria'],
'id': [1,2,3,4,5,6]})
df['texto'] = df['texto'].str.lower()
searchwords = ['hubble','audi','obama','clarín','austria']
我正在嘗試搜索所選關鍵字中的每一個是否都出現在上面 dataframe 中以創建一個新關鍵字。 我試過'startswith'
,但只包含關鍵字在前的句子。
Code:
df = df[df['texto'].str.startswith(tuple(searchwords))]
Output:
clarín cumplió 70 años y lo celebró con su per... 3
您知道創建 pandas 行或 function 來創建這樣的過濾器的方法嗎?
謝謝!
利用
df2 = df[df['texto'].str.contains('|'.join(searchwords))]
解釋:
'|'.join(searchwords)
生成一個字符串,搜索詞由 | 分隔 (或運算符)符號。 df['texto'].str
將列的每個元素作為字符串提供,然后檢查它是否包含任何搜索詞(因此是 OR 運算符)。 這會產生一系列 True / False 值。 boolean 系列然后用於 select DataFrame df 中滿足True
條件的行,這些形成新的 DataFrame df2。
這樣做的另一種選擇(沒有矢量化因此效率較低)是:
def serach_term(texto, terms):
if any([t in texto for t in terms]):
return True
return False
和
df['exists'] = df.apply(lambda x: serach_term(x['texto'],searchwords), axis=1)
期望的結果:[![在此處輸入圖片描述][1]][1]
您獲得了 function 的控制權並可以相應地進行調整,但是您逐行移動並且速度相對較慢。
texto id exists
0 el hubble registró imágenes de una "mariposa i... 1 True
1 con su audi atropelló y mató a una pareja: lo ... 2 True
2 clarín cumplió 70 años y lo celebró con su per... 3 True
3 a diez años de katrina, obama visitó nueva orl... 4 True
4 la oposición volvió a juntarse y pidió la bole... 5 False
5 hallan a casi 50 “sin papeles” muertos en un c... 6 True
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.