2017-07-27 55 views
0

我正在搜索关键字的一些网页。再次感谢@Abdou帮助我与silent error handling!我给你举个例子:在文本中搜索关键字并为每个找到的关键字创建一个数据框列?

# this is basically what I do 
import pandas as pd 
import requests 


data = [{"URLs" : "https://www.mercedes-benz.de", "electric" : 1}, 
     {"URLs" : "https://www.audi.de", "electric" : 0}, 
     {"URLs" : "https://ww.audo.de", "electric" : 0}, 
     {"URLs" : "NaN", "electric" : 0}] 


def contains_keywords(link, keywords): 
    try: 
     output = requests.get(link).text 
     return int(any(x in output for x in keywords)) 
    except: 
     return "Wrong/Missing URL" 


df = pd.DataFrame(data) 
mykeywords = ('car', 'vehicle', 'automobile') 
df['extra_column'] = df.URLs.apply(lambda l: contains_keywords(l, mykeywords)) 

正如你所看到的,我请求存储在df.data的URL和mykeywords搜索关键词和二进制结果存储在extra_column。该脚本基本上产生如下:

#       URLs electric  extra_column 
# 0 https://www.mercedes-benz.de   1     1 
# 1   https://www.audi.de   0     1 
# 2    https://ww.audo.e   0     0 
# 3       NaN   0 Wrong/Missing URL 

到目前为止,我只知道,如果我找到一个关键字。但我想知道,我发现哪些关键字 - 无需分别为mykeywords中的每个关键字运行contains_keywords()。有没有办法为每个关键字创建一个新列,并将结果(1 =找到的关键字)存储在DataFrame?那就是:我需要df中的每个关键字的其他列。

+1

“我想知道,我发现哪些关键字...”意味着您需要在'df'中为_each_关键字添加更多列吗? –

+0

嗨德米特里,这正是我想要的!每个关键字的列。那可能吗?我尝试了我所知道的一切,但到目前为止我还没有成功。对不起,我的问题不清楚。我会相应地编辑它。 – Rachel

回答

1
import pandas as pd 
import requests 


data = [{"URLs" : "https://www.mercedes-benz.de", "electric" : 1}, 
     {"URLs" : "https://www.audi.de", "electric" : 0}, 
     {"URLs" : "https://ww.audo.de", "electric" : 0}, 
     {"URLs" : "NaN", "electric" : 0}] 


def contains_keywords(link, keyword): 
    try: 
     output = requests.get(link).text 
     return int(keyword in output) 
    except: 
     return "Wrong/Missing URL" 


df = pd.DataFrame(data) 
mykeywords = ('car', 'vehicle', 'automobile') 
for keyword in mykeywords: 
    df[keyword] = df.URLs.apply(lambda l: contains_keywords(l, keyword)) 
+0

哇!这太酷了!我只是还不明白。它可以直接调用'keyword'作为'df.column'吗?超酷!谢谢! – Rachel

+1

不客气,Rachel =)祝​​你好运。 –

+0

Hi @Dmitriy Fialkovskiy,最后一个简单问题:我知道给定'forloop',我为'mykeywords'中的每个'keyword'应用'containains_keywords'函数。所以在这种情况下,3次。这是否也意味着,一次搜索'int(任何(关键字x中的输出为x))'需要3倍? – Rachel