Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何用刮取的数据覆盖Dataframe NaN_Python_Pandas_Beautifulsoup - Fatal编程技术网

Python 如何用刮取的数据覆盖Dataframe NaN

Python 如何用刮取的数据覆盖Dataframe NaN,python,pandas,beautifulsoup,Python,Pandas,Beautifulsoup,我有一个df: Company Name Symbol CUSIP 0 Aa Inc NaN 26874784 4 Cc Inc NaN 16117M305 7 Bb Inc NaN 30734W208 我通过beautifulsoup从CUSIP查找符号。但是当我刮取符号并尝试写入df时,行仍然是NaN,而不是包含刮取的符号,如下所示: Company Name Symbol CUSI

我有一个
df

  Company Name  Symbol      CUSIP
0       Aa Inc     NaN   26874784
4       Cc Inc     NaN  16117M305
7       Bb Inc     NaN  30734W208
我通过beautifulsoup从
CUSIP
查找
符号。但是当我刮取
符号
并尝试写入
df
时,行仍然是
NaN
,而不是包含刮取的
符号
,如下所示:

  Company Name      Symbol      CUSIP
0       Aa Inc         AIG   26874784
4       Cc Inc   No Symbol  16117M305
7       Bb Inc      FPAC/U  30734W208
如何将
NaN
符号
替换为刮取的
符号

import pandas as pd
from bs4 import BeautifulSoup as bs
import requests
import time

# Crawl Fidelity.com to find symbols for new CUSIPs
base_url = "https://quotes.fidelity.com/mmnet/SymLookup.phtml" \
           "?reqforlookup=REQUESTFORLOOKUP&productid=mmnet&isLoggedIn" \
           "=mmnet&rows=50&for=stock&by=cusip&criteria={}&submit=Search"

def read_symbol(cusip):
    r = requests.get(base_url.format(cusip))
    soup = bs(r.content, 'lxml')
    symbol = soup.select_one('[href*=SID_VALUE_ID]')
    return symbol.text if symbol is not None else None

for index, row in df.iterrows():
    cusip = row['CUSIP']
    company_name = row['Company Name']
    for zeroes in range(3):
        symbol = read_symbol(zeroes * "0" + cusip)
        row['Symbol'] = 'No Symbol' if symbol is None else symbol
        if symbol is not None:
            break
    print(str(symbol) + " is the symbol for " + str(company_name) + " (CUSIP #: " + str(cusip) + ")")
    time.sleep(3)

print(df)

CUSIP列必须显式读取为字符串列。以便保留前导零。此外,您还可以使用填充零,因为
CUSIP
number始终是9位数字

df['CUSIP'] = df['CUSIP'].astype(str).str.zfill(9)
从BeatifulSoup构造函数中删除lxml解析器

def read_symbol(cusip):
    r = requests.get(base_url.format(cusip))
    soup = bs(r.content, 'html.parser')
    symbol = soup.select_one('[href*=SID_VALUE_ID]')
    return symbol.text if symbol is not None else np.nan
使用map和fillna

df['Symbol'] = df['CUSIP'].map(read_symbol).fillna('No Symbol')
输出

  Company Name     Symbol      CUSIP
0      Aa  Inc        AIG  026874784
4      Cc  Inc  No Symbol  16117M305
7      Bb  Inc     FPAC/U  30734W208

CUSIP列必须显式读取为字符串列。以便保留前导零。此外,您还可以使用填充零,因为
CUSIP
number始终是9位数字

df['CUSIP'] = df['CUSIP'].astype(str).str.zfill(9)
从BeatifulSoup构造函数中删除lxml解析器

def read_symbol(cusip):
    r = requests.get(base_url.format(cusip))
    soup = bs(r.content, 'html.parser')
    symbol = soup.select_one('[href*=SID_VALUE_ID]')
    return symbol.text if symbol is not None else np.nan
使用map和fillna

df['Symbol'] = df['CUSIP'].map(read_symbol).fillna('No Symbol')
输出

  Company Name     Symbol      CUSIP
0      Aa  Inc        AIG  026874784
4      Cc  Inc  No Symbol  16117M305
7      Bb  Inc     FPAC/U  30734W208

你的问题不清楚!我已经移动到您提到的url,但它没有提供您所展示的输出。我认为您可以这样做:
df['Symbol']=df['CUSIP'].str.zfill(9).map(read_Symbol)
返回
['AIG',nan',FPAC/U']
您的问题不清楚!我已经移动到您提到的url,但它没有提供您演示的输出。我认为您可以这样做:
df['Symbol']=df['CUSIP'].str.zfill(9).map(read_Symbol)
返回
['AIG',nan',FPAC/U']
谢谢@jezrael的帮助。谢谢。我可能仍然需要
sleep
函数,以避免我正在抓取的url过载,因此我应该将其粘贴在
return
语句之前吗?另外,当我删除lxml解析器时,我会得到一个警告
UserWarning:没有明确指定解析器……要消除此警告,请将附加参数'features=“lxml”'传递给BeautifulSoup构造函数。
我知道我可以忽略此问题,但是保留lxml解析器以抑制警告有什么害处吗?更新答案@MSD,是的,您可以在返回之前睡觉。谢谢@jezrael的帮助。谢谢。我可能仍然需要
sleep
函数,以避免我正在抓取的url过载,因此我应该将其粘贴在
return
语句之前吗?另外,当我删除lxml解析器时,我会得到一个警告
UserWarning:没有明确指定解析器……要消除此警告,请将附加参数'features=“lxml”'传递给BeautifulSoup构造函数。
我知道我可以忽略此问题,但是保留lxml解析器以抑制警告有什么害处吗?更新了answer@MSD,是的,您可以在返回之前睡觉。