[英]Pandas DataFrame Speed
因此,我要在前面的數據幀中添加一個名為“ 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)
是否有某些安排或應用程序是這樣做的更快方法?
謝謝。
您可以使用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()
函數中的if
語句永遠不會被觸發,您也可以考慮在此處實現一些錯誤處理。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.