python-3.x 如何用新的对应的刮擦数据更新给定 Dataframe 的多个列?

vshtjzan  于 2022-11-26  发布在  Python
关注(0)|答案(1)|浏览(106)

以下 Dataframe 包含两个空列(销售额和收入),应使用与股票代码列对应的抓取数据更新这两个空列:

df = pd.DataFrame({
    'No.': {0: '1', 1: '2', 2: '3', 3: '4', 4: '5'}, 
    'Ticker': {0: 'AAPL', 1: 'MSFT', 2: 'TSLA', 3: 'FB', 4: 'BRK-B'}, 
    'Sales': {0: '', 1: '', 2: '', 3: '', 4: ''}, 
    'Income': {0: '', 1: '', 2: '', 3: '', 4: ''}, 
    'Company': {0: 'Apple Inc.', 1: 'Microsoft Corporation', 2: 'Tesla, Inc.', 3: 'Meta Platforms, Inc.', 4: 'Berkshire Hathaway Inc.'}, 
    'Sector': {0: 'Technology', 1: 'Technology', 2: 'Consumer Cyclical', 3: 'Communication Services', 4: 'Financial'}
    })

使用下面的附加代码,我可以从快照表中提取Sales和Income信息,但只能提取一个股票代码,而且我不知道如何更新 Dataframe :

附加代码

ticker = (df.iloc[0,1])
    #---------- Pulling the data from chosen stock ticker ----------#
    
    url = ('https://finviz.com/quote.ashx?t=' + ticker.upper())
    
    req = requests.get(url,headers=headers)
    table = pd.read_html(req.text, attrs = {"class":"snapshot-table2"} )
    df = table[0]
    
    print(f'{df[0][3]}: {df[1][3]}: {df[0][2]}: {df[1][2]}')

预期结果:

| 不,不,不|自动收报机|销售部|收入情况|公司名称|部门|
| - -|- -|- -|- -|- -|- -|
| 一个|AAPL语言| 365.82B | 94.68B |苹果公司|技术|
| 2个|微软技术| 176.25B | 67.88B |微软公司|技术|
| 三个|TSLA| 46.85B | 3.47B |特斯拉公司|消费者周期|
| 四个|反馈| 112.33B | 40.30B | meta平台公司|通信服务|
| 五个|制动器B| 268.68B |- -|伯克希尔海瑟薇公司|财务|

q3qa4bjr

q3qa4bjr1#

如何实现?

将附加代码放入def中,并结合使用zip()map()来更新列:

df['Sales'],df['Income'] = zip(*df['Ticker'].map(lambda x: get_ticker(x)))

示例

**注:***标记可能会改变(FB -〉 meta),因此,在出现错误时,始终注意所请求的内容 *

def get_ticker(ticker):
    #---------- Pulling the data from chosen stock ticker ----------#
    
    url = ('https://finviz.com/quote.ashx?t=' + ticker.upper())
    
    req = requests.get(url,headers=headers)
    table = pd.read_html(req.text, attrs = {"class":"snapshot-table2"} )
    df = table[0]
    return(df[1][3],df[1][2])

df['Sales'],df['Income'] = zip(*df['Ticker'].map(lambda x: get_ticker(x)))

输出

| 不,不,不|自动收报机|销售部|收入情况|公司名称|部门|
| - -|- -|- -|- -|- -|- -|
| 一个|AAPL语言| 365.82B | 94.68B |苹果公司|技术|
| 2个|微软技术| 176.25B | 67.88B |微软公司|技术|
| 三个|TSLA| 46.85B | 3.47B |特斯拉公司|消费者周期|
| 四个|反馈| 112.33B | 40.30B | meta平台公司|通信服务|
| 五个|制动器B| 268.68B |- -|伯克希尔海瑟薇公司|财务|

相关问题