markowitz = pd.read_excel('C:/Users/jordan/Desktop/book2.xlsx')
markowitz = markowitz.set_index('Dates')
markowitz
有一种简单的方法可以做到这一点,我用
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
但是我还有很多日期需要复制和粘贴(我可以只显示第二行"日期和#34;)然后将它们设置为前一个交易日价值,是否有更简单的方法做这个 ?非常感谢。
答案 0 :(得分:0)
如果我知道你想要做什么,可能会有一种更简单的方法。数据帧上的fillna方法允许您转发填充。因此,如果您不想填写周末,但希望填写所有其他时间(即假期),您可以按如下方式排除星期六和星期日:
df.loc[~df['Date'].dt.weekday_name.isin(['Saturday','Sunday'])] = df.loc[~df['Date'].dt.weekday_name.isin(['Saturday','Sunday'])].fillna(method='ffill')
您可以在整个数据框或特定列上使用它。
答案 1 :(得分:0)
我认为您最好的选择是从quandl.com获取API密钥。它是免费的,可让您访问各种时间序列的历史数据。过去曾经可以使用Yahoo Finance和Google Finance,但我认为这两者在一年多以前就已经贬值了。
这是一小段代码示例,肯定可以为您提供帮助。
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)
检查下面的链接,以获取有关如何获取所需数据的信息。
https://blog.quandl.com/api-for-stock-data
此外,请参阅此以获取有关使用Python进行定量金融的更多详细信息。
https://financetrain.com/best-python-librariespackages-finance-financial-data-scientists/
最后,如果这有点偏离主题,我深表歉意,但我认为这可能会在一定程度上有所帮助...考虑这样的事情...
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)
这不是时间序列数据,而是基本数据。我没有在该站点上花费很多时间,但是也许您可以四处寻找并找到适合您需求的东西。只是一个想法。