【问题标题】:simple bs4 script to pandas df熊猫 df 的简单 bs4 脚本
【发布时间】:2018-12-11 23:12:34
【问题描述】:

非常简单的问题,我正在编写这个脚本来抓取一些网络数据:

for x in df['Product ID']:
search_url = 'url' + x
uclient = uReq(search_url)
page_html = uclient.read()
uclient.close()
page_soup = soup(page_html,"html.parser")
rp = page_soup.findAll("h2",{"class" : 'highlightValue'})[0].text.strip()

将循环的这个结果写回我的数据框的最佳方法是什么?如果我分配一个新列让我们称之为 df['Price'] 它将在循环的每个元素中被覆盖,而我只希望它为 x 分配一个值。

data = ['12345','6789']
pd.DataFrame({'Product ID' : data}) 

所以如果 12345 = 25 英镑在我的网站上的价格和 6789 英镑 50 英镑我想分别分配回来,我错过了一些简单的东西吗?

想要的输出

Product ID  Price
12345       £25
6789        £50

【问题讨论】:

    标签: python pandas beautifulsoup


    【解决方案1】:
    data = ['12345','6789']
    df = pd.DataFrame({'Product ID' : data}) 
    
    
    for x in df['Product ID']:
        search_url = 'url' + x
        uclient = uReq(search_url)
        page_html = uclient.read()
        uclient.close()
        page_soup = soup(page_html,"html.parser")
        rp = page_soup.findAll("h2",{"class" : 'highlightValue'})[0].text.strip()
    
        df.loc[df['Product ID'] == x,'Price'] = rp
    

    下面的代码选择与变量 x 的产品 ID 匹配的行,并将这些行的“价格”列分配给您刚刚抓取的内容

    df.loc[df['Product ID'] == x,'Price'] = rp

    【讨论】:

    • 知道这是我需要的,只是不记得语法了!但是它不起作用,数据框保持不变,它没有将值附加到数据中(当我编写打印语句进行检查时,这些值被拉出)
    • 如果它有效,我会的,只是尝试了df.loc[df['Product ID'] == x]['Price'] = 25,它在我的数据框上没有显示任何内容。
    • 对不起。错过了, 再试一次(在上面的代码中修复)
    • 谢谢!我还尝试了一种更基本的方法,将每个循环传递给一个空列表,然后将该列表传递给对这个小列表起作用的 df。你的回答也有效。谢谢!
    猜你喜欢
    • 2016-03-31
    • 2018-12-01
    • 2021-10-31
    • 2021-08-18
    • 2021-02-09
    • 1970-01-01
    • 2022-11-03
    • 2022-08-21
    • 1970-01-01
    相关资源
    最近更新 更多