Python 如何提取股票价格数据的周末和银行假期

Python 如何提取股票价格数据的周末和银行假期,python,pandas,dataframe,Python,Pandas,Dataframe,有没有一个简单的方法可以做到这一点,我用过 markowitz = pd.read_excel('C:/Users/jordan/Desktop/book2.xlsx') markowitz = markowitz.set_index('Dates') markowitz 但是仍然有很多日期需要复制和粘贴(我可以只显示第二行“日期”),然后将它们设置为前一个交易日的值,有没有更简单的方法?事先非常感谢。如果我知道你想做什么,可能有一个更简单的方法。dataframes上的fillna方法允许进

有没有一个简单的方法可以做到这一点,我用过

markowitz = pd.read_excel('C:/Users/jordan/Desktop/book2.xlsx')
markowitz = markowitz.set_index('Dates')
markowitz

但是仍然有很多日期需要复制和粘贴(我可以只显示第二行“日期”),然后将它们设置为前一个交易日的值,有没有更简单的方法?事先非常感谢。

如果我知道你想做什么,可能有一个更简单的方法。dataframes上的fillna方法允许进行前向填充。因此,如果您不想填满周末,但想填满所有其他nas(即假期),您可以只排除周六和周日,如下所示:

import pandas as pd
from pandas.tseries.holiday import USFederalHolidayCalendar as calendar

dr = pd.date_range(start='2013-01-01', end='2018-06-12')
df = pd.DataFrame()
df['Date'] = dr

cal = calendar()
holidays = cal.holidays(start=dr.min(), end=dr.max())

df['Holiday'] = df['Date'].isin(holidays)
print (df)
df = df[df['Holiday'] == True]
df

您可以在整个数据帧或特定列上使用它

我认为您最好的选择是从quandl.com获得API密钥。它是免费的,让你可以访问各种时间序列历史数据。雅虎金融和谷歌金融过去是可以使用的,但我认为它们在一年前都贬值了很多

下面是一个小的代码示例,它绝对可以帮助您

df.loc[~df['Date'].dt.weekday_name.isin(['Saturday','Sunday'])] = df.loc[~df['Date'].dt.weekday_name.isin(['Saturday','Sunday'])].fillna(method='ffill')
有关如何获取所需数据的信息,请查看下面的链接

另外,请参阅本文以了解有关使用Python进行定量金融的更多详细信息

最后,我道歉,如果这是一个稍微偏离主题,但我认为它可能是有帮助的,在某种程度上……考虑这样的事情…

import quandl
quandl.ApiConfig.api_key = 'your_api_key_goes_here'

# get the table for daily stock prices and,
# filter the table for selected tickers, columns within a time range
# set paginate to True because Quandl limits tables API to 10,000 rows per call

data = quandl.get_table('WIKI/PRICES', ticker = ['AAPL', 'MSFT', 'WMT'], 
                        qopts = { 'columns': ['ticker', 'date', 'adj_close'] }, 
                        date = { 'gte': '2015-12-31', 'lte': '2016-12-31' }, 
                        paginate=True)
print(data)

这不是时间序列数据,而是基础数据。我在那个网站上没花太多时间,但也许你可以随便看看,找到适合你需要的东西。只是想一想。

非常感谢。然而,我需要导入任何东西来支持这个“日期”吗?哦,不,我只是在使用上面的df['Date']列。Date与df['Date']相同,您可以使用点符号访问任何列(其名称没有空格)。我为Clarity编辑了我的答案,非常感谢。“df”数据框是我创建的用来标识假日的数据框。包含NaN值的框架是“markowitz”。有没有一种方法可以让我直接识别和设置“markowitz”中的值?对不起,有这么多问题。。。。。。。
import requests
from bs4 import BeautifulSoup

base_url = 'http://finviz.com/screener.ashx?v=152&s=ta_topgainers&o=price&c=0,1,2,3,4,5,6,7,25,63,64,65,66,67'
html = requests.get(base_url)
soup = BeautifulSoup(html.content, "html.parser")
main_div = soup.find('div', attrs = {'id':'screener-content'})

light_rows = main_div.find_all('tr', class_="table-light-row-cp")
dark_rows = main_div.find_all('tr', class_="table-dark-row-cp")

data = []
for rows_set in (light_rows, dark_rows):
    for row in rows_set:
        row_data = []
        for cell in row.find_all('td'):
            val = cell.a.get_text()
            row_data.append(val)
        data.append(row_data)

#   sort rows to maintain original order
data.sort(key=lambda x: int(x[0]))

import pandas
pandas.DataFrame(data).to_csv("AAA.csv", header=False)