адресация значения во фрейме данных рядом с определенным значением - PullRequest
1 голос
/ 13 мая 2019

пытается обратиться к определенному значению во фрейме данных.

Я получил CSV-файл, который выглядит следующим образом: введите описание изображения здесь

Я использовал запасстолбец как индекс для цикла for.затем я получил исторические данные о ценах от Yahoo Finance, используя селен, который я преобразовал в фрейм данных, выглядит следующим образом: введите описание изображения здесь Я хочу найти дату запаса в фрейме данных, который я получил от Yahoo Finance.

for stock_symbol in mystocks:
yahoo_url = "https://finance.yahoo.com/quote/"+stock_symbol+"/history?period1=0&period2=2597263000&interval=1d&filter=history&frequency=1d"

получение данных

bs_data = BeautifulSoup(source_data, features="lxml")
table = bs_data.find('table', attrs={"data-test": "historical-prices"})
dataf = pd.read_html(str(table))

Я хочу создать цикл for, который извлекает значения из строки требуемой даты и помещает ее в CSV (фондовое название Date Open High Low Low)Close * Adj Close ** Volume).

Я хочу получить только определенную дату из CSV, которую я получил.например, в CSV для CALM желаемая дата - 01 апреля 2019 года, поэтому я хочу извлечь только данные этой даты из фрейма данных Yahoo.

1 Ответ

1 голос
/ 13 мая 2019

Я не эксперт в BeautifulSoup, я попробовал это, загрузив данные в формате csv в каталог по умолчанию (параметры chrome) (есть ссылка для загрузки)

Это неозначает ответ на ваш вопрос, когда вы используете BeautifulSoup, но что-то, что вы можете рассмотреть.

import time
from pathlib import Path

import pandas as pd
from selenium.webdriver import Remote
from selenium.webdriver.chrome.options import Options

download_path = Path(r'C:\stackoverflow')

options = Options()
options.add_experimental_option("prefs", {
    "download.default_directory": str(download_path),
    "download.prompt_for_download": False,
    "download.directory_upgrade": True,
    "safebrowsing.enabled": True
})

driver = Remote(options=options)
stock_symbols = ['CALM', 'CTRA', 'NVGS', 'ANGO']

for stock_symbol in stock_symbols:
    driver.get(f'https://finance.yahoo.com/quote/{stock_symbol}/history?period1=0&period2=2597263000&interval=1d&filter=history&frequency=1d')
    time.sleep(5) # Replace with Webdriver Wait

    download_data_link = driver.find_element_by_link_text('Download Data')
    file_name = download_data_link.get_attribute('download')
    download_data_link.click()

    file_path = download_path / file_name
    while True:
        if file_path.exists():
            break

    df = pd.DataFrame.from_csv(file_path)
    df['Stock Name'] = stock_symbol
    print(df.head())

    break

Вывод

           Open    High      Low     Close  Adj Close   Volume Stock Name
 Date                                                                         
 1996-12-12  1.81250  1.8125  1.68750  1.703125   0.743409  1984400       CALM
 1996-12-13  1.71875  1.8125  1.65625  1.781250   0.777510   996800       CALM
 1996-12-16  1.81250  1.8125  1.71875  1.718750   0.750229   122000       CALM
 1996-12-17  1.75000  1.8125  1.75000  1.773425   0.774094   239200       CALM
 1996-12-18  1.81250  1.8125  1.75000  1.812500   0.791151   216400       CALM

фильтр по дате

df = df.reset_index()
print(df.loc[df['Date'] == '1996-12-12'])

        Date    Open    High     Low     Close  Adj Close   Volume Stock 
Name
0 1996-12-12  1.8125  1.8125  1.6875  1.703125   0.743409  1984400       CALM
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...