Добавить данные, удаленные из Интернета, в тот же лист Excel - PullRequest
0 голосов
/ 25 мая 2020

Я хочу получить столбец из Интернета, используя для l oop (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

1 Ответ

0 голосов
/ 25 мая 2020

Решение 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   
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...