将网络抓取的数据附加到同一个 Excel 工作表

Append web-scraped data to same excelsheet

我想使用 for 循环 (date_range) 从 Web 中获取一列,并将该列附加到同一个 sheet,每次迭代时,彼此相邻。

import pandas as pd
import datetime as dt
import openpyxl

range = pd.date_range(start='5/12/2020', end='5/21/2020')

for date in range:

df = pd.read_csv("ürl")

writer = pd.ExcelWriter('Sample.xlsx', engine='openpyxl')

writer.book = openpyxl.load_workbook('Sample.xlsx')

writer.sheets = dict((ws.title, ws) for ws in writer.book.worksheets)

read = pd.read_excel(r'Sample.xlsx')

writer.sheets.write(1, max_column+1, df)

writer.save()

date += delta

解决方案 1

我不完全确定你还有什么,但我试着想出这个作为起点。它使用 Yahoo Finance API 来模拟您的股票价格。这定义了两个函数,一个接受一个公司符号并获取该公司的当前市场价格,另一个通过将其应用于一列符号的所有值将其推广到数据框。

from datetime import datetime

def get_market_price(symb):
    try:
        comp_info = yf.Ticker(symb)
        return comp_info.info['regularMarketPrice']
    except Exception:
        return np.nan

def fetch_today(df):
    today = datetime.today().date().strftime('%Y-%m-%d')
    df[today] = df['Companies'].apply(get_market_price)
    return df

这里是一些示例数据,以及上述函数的应用。

df = pd.DataFrame({
    'Companies': ['XOM', 'GE', 'MSFT', 'BP', 'C', 'PG']
})

df = fetch_today(df)

print(df)

输出

  Companies  2020-05-25
0       XOM         NaN
1        GE        6.48
2      MSFT      183.19
3        BP       22.98
4         C         NaN
5        PG      112.29

在此示例中,您应该每天使用 pd.read_csv 读取数据,应用 fetch_today,然后使用 pd.to_csv 保存新数据帧。每次你 运行 它在新的一天,它都会附加一个带有当前日期标题和新数据的列。

解决方案 2

如果您的数据只是公司列表,并且您只想 运行 此脚本一次并获取特定范围内的数据,那么这样的方法可能会起作用。

def get_closing_values(symb):
    comp_info = yf.download(symb, start='2020-5-12', end='2020-5-21')
    s = comp_info['Close']
    s.name = symb
    return s.to_frame().T

companies = ['XOM', 'GE', 'MSFT', 'BP', 'C', 'PG']

df = pd.concat([get_closing_values(comp) for comp in companies])

print(df)

Date  2020-05-11  2020-05-12  2020-05-13  2020-05-14  2020-05-15  2020-05-18   
XOM    45.740002   44.119999   41.930000   42.299999   42.000000   45.340000   
GE      6.190000    6.000000    5.790000    5.700000    5.490000    6.270000   
MSFT  186.740005  182.509995  179.750000  180.529999  183.160004  184.910004   
BP     23.500000   23.059999   22.230000   22.139999   21.820000   23.510000   
C      44.070000   42.349998   40.599998   42.060001   41.919998   45.669998   
PG    115.309998  114.550003  113.919998  113.809998  114.610001  116.209999