将经网络加密的数据追加到相同的excelsheet

问题描述 投票:0回答:1

我想使用for循环(date_range)从网上获取一列,并将该列附加到同一张纸上,每次迭代都彼此相邻。

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
python-3.x excel pandas append multiple-columns
1个回答
0
投票

解决方案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   
© www.soinside.com 2019 - 2024. All rights reserved.