Python 为什么使用str(df[col])会导致代码只与单个记录相关?

Python 为什么使用str(df[col])会导致代码只与单个记录相关?,python,pandas,web-scraping,beautifulsoup,data-science,Python,Pandas,Web Scraping,Beautifulsoup,Data Science,我有一个包含线索(名称)的数据框。 我试图在网上搜索有关这些线索的相关数据 我正在使用beautifulsoup和urllib来刮取数据。 url如下所示: url = u'https://www.website.com/SearchResults?query=' + quote(str(df['name'])) url = u'https://www.website.com/SearchResults?query=' + quote('this+is+a+leads+name') 问题是,

我有一个包含线索(名称)的数据框。 我试图在网上搜索有关这些线索的相关数据

我正在使用beautifulsoup和urllib来刮取数据。 url如下所示:

url = u'https://www.website.com/SearchResults?query=' + quote(str(df['name']))
url = u'https://www.website.com/SearchResults?query=' + quote('this+is+a+leads+name')
问题是,对于每个潜在客户,我都会得到完全相同的数据,这是数据帧中最后一个潜在客户的数据,数据是从中检索到的

每当我使用字符串名而不是str(df['name'])时,我都会为特定的lead获取正确的数据,如下所示:

url = u'https://www.website.com/SearchResults?query=' + quote(str(df['name']))
url = u'https://www.website.com/SearchResults?query=' + quote('this+is+a+leads+name')
我认为这个问题与str(df['name'])特别相关的原因是,每当我删除它时,我都会成功地获取数据,否则,我会从100000个Lead获得相同的数据。唯一的问题是,为了使用数据框中的线索,我需要使用str。

str(df)
将返回数据框的文本表示形式。比如说

>>> pd.DataFrame({"col1":[1,2,3,4], "name":["row1","row2","row3","row4"]})
    col1  name
0     1  row1
1     2  row2
2     3  row3
3     4  row4
上述数据框的文本表示形式将返回

col1  name
1  row1
2  row2
3  row3
4  row4
因此,要执行行操作,最好使用dataframe中的
apply
函数

>>> def search_url(search_lead):
...     url = u'https://www.website.com/SearchResults?query=' + search_lead
...     print(url) #You can do your operation here
通过使用上述功能,使用
apply

>>> df.name.apply(lambda x: search_url(x))
https://www.website.com/SearchResults?query=row1
https://www.website.com/SearchResults?query=row2
https://www.website.com/SearchResults?query=row3
https://www.website.com/SearchResults?query=row4
0    None
1    None
2    None
3    None
Name: name, dtype: object
您可以在函数中执行web抓取。希望这个答案对您有所帮助。

谢谢大家

我试过你们的建议。 对我来说,真正起作用的是创建一个从web获取数据的功能, 然后使用for循环为一行中每个潜在客户的名称调用函数

简而言之,我就是这么做的:

功能:

def getdata(name):

    url = u'https://www.website.com/search?q=' + quote(str(name))
    .
    .
    .
    return (data)
循环:

for i, row in df.iterrows():

    leaddata = getdata(df.name[i])

    list1.append(leaddata)

然后我继续将列表插入到数据框中。

您的
quote
方法做什么?
df['name']。astype(str)
?或者
df['name']。对行操作应用(lambda x:str(x))
?我不相信我曾经使用过str(df[col]),所以我不确定会发生什么。希望这有帮助。
>>> def search_url(search_lead):
...     url = u'https://www.website.com/SearchResults?query=' + search_lead
...     print(url) #You can do your operation here