Python 在数据帧中寻址某个值旁边的值

Python 在数据帧中寻址某个值旁边的值,python,selenium,Python,Selenium,试图在数据帧中寻址某个值 我得到的CSV文件如下所示: 我使用stock列作为for循环的索引。然后我使用selenium从yahoo finance获得了历史价格数据,我将其转换为如下数据框: 我想在我从雅虎财经得到的数据框中搜索股票日期 for stock_symbol in mystocks: yahoo_url = "https://finance.yahoo.com/quote/"+stock_symbol+"/history?period1=0&period2=259726

试图在数据帧中寻址某个值

我得到的CSV文件如下所示:

我使用stock列作为for循环的索引。然后我使用selenium从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(股票名称日期打开高低关闭*调整关闭**卷)


我想要的输出只是我得到的CSV中的某个日期。例如,在Calme的CSV中,需要的日期是2019年4月1日,因此我只想从Yahoo数据框中提取此日期数据。

我不是BeautifulSoup的专家,我尝试将CSV格式的数据下载到默认目录(chrome选项)(有一个下载链接)

当你使用漂亮的汤时,这决不是你的问题的答案,而是你可以考虑的东西。

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

至于从雅虎下载的内容,我很想把它改成你的方式,我只是不知道如何。。。我试过你写的东西,但它给了我一些错误
ConnectionRefusedError:[WinError 10061]无法建立连接,因为目标计算机主动拒绝它
,我想要的输出只是我得到的CSV中的一个特定日期。例如,在平静的CSV中,想要的日期是2019年4月1日,所以我只想从Yahoo数据框中提取此日期数据。我使用了远程驱动程序,您可能没有启动selenium独立服务器,这可能就是您出现连接错误的原因。检查你的司机。我已经更新了答案,根据给定的数据进行过滤。希望这有帮助。非常感谢!这对我帮助很大。有没有可能你可以指导我如何建立一个独立的服务器,这样我就可以从雅虎下载CSV?您可以使用chrome或firefox驱动程序并下载csv文件,而不是打开chrome并抓取数据(您的方法将节省大量时间)。我使用远程驱动程序的唯一原因是我的本地设置(Docker Selenium Grid)。如果你想学习,这是一个很好的起点