因此,我要在前面的数据帧中添加一个名为“ dload”的新列,该列是通过编码df [“ dload”] = np.nan
实现的然后我要用此函数的返回值来填充nan值:
def func_ret_value(soup,tables):
for td in tables[40].findAll("td"):
if td.text == "Short Percent of Float":
value = list(td.next_siblings)[1].text.strip("%")
#print(value)
return value
为此,我编写了以下代码:
for index in df.index:
# print(index,row)
# print(index,df.iloc[index]["Symbol"])
r = requests.get(url_pre+df.iloc[index]["Symbol"]+url_suf)
soup = BeautifulSoup(r.text,"html.parser")
tables = soup.findAll("table")
#print(row["dload"])
df.loc[index,"dload"] = func_ret_value(soup,tables)
是否存在一些迭代或应用,这是一种更快的方法?
谢谢。
答案 0 :(得分:0)
您可以使用apply()
,但是我猜想代码中计算量最大的部分是HTTP请求(如@Peter Leimbigler在其评论中提到的那样)。这是您的函数示例:
def func_ret_value(x):
r = requests.get(url_pre + x['Symbol'] + url_suf)
soup = BeautifulSoup(r.text, 'html.parser')
tables = soup.findAll('table')
for td in tables[40].findAll("td"):
if td.text == "Short Percent of Float":
return list(td.next_siblings)[1].text.strip("%")
df['dload'] = df.apply(func_ret_value, axis=1)
请注意,axis=1
指定您将逐行应用此函数。
如果在给定的行中从未触发if
函数中的func_ret_value()
语句,您也可以考虑在此处实现一些错误处理。