Python 3.x 将月末交易日历应用于Yahoo API数据

Python 3.x 将月末交易日历应用于Yahoo API数据,python-3.x,pandas,Python 3.x,Pandas,这是我的第一篇文章,我对Python和Pandas还不熟悉。根据我在这个网站上看到的许多问题和答案,我一直在努力拼凑下面的代码。我的下一个挑战是如何将月末交易日历应用于下面的代码,以便输出包括“VTI和BND”列出的两个ETF的月末“调整收盘”值。“100ma”100日移动平均线仍必须基于前100个交易日计算 @ryan sheftel似乎在这个网站上有一些可以工作的东西,但我似乎无法用我的代码来实现它,以满足我的需求 到目前为止,我已经整理好了代码: import datetime as d

这是我的第一篇文章,我对Python和Pandas还不熟悉。根据我在这个网站上看到的许多问题和答案,我一直在努力拼凑下面的代码。我的下一个挑战是如何将月末交易日历应用于下面的代码,以便输出包括“VTI和BND”列出的两个ETF的月末“调整收盘”值。“100ma”100日移动平均线仍必须基于前100个交易日计算

@ryan sheftel似乎在这个网站上有一些可以工作的东西,但我似乎无法用我的代码来实现它,以满足我的需求

到目前为止,我已经整理好了代码:

import datetime as dt  #set start and end dates for data we are using
import pandas as pd
import numpy as np
import pandas_datareader.data as web # how I grab data from Yahoo Finance API. Pandas is popular data analysis library.

start = dt.datetime(2007,1,1)
end = dt.datetime(2017,2,18)

vti = web.DataReader('vti', 'yahoo',start, end)# data frame, stock ticker symbol, where getting from, start time, end time
bnd = web.DataReader('bnd', 'yahoo', start, end)

vti["100ma"] = vti["Adj Close"].rolling(window=100).mean()
bnd["100ma"] = bnd["Adj Close"].rolling(window=100).mean()

# Below I create a DataFrame consisting of the adjusted closing price of these stocks, first by making a list of these objects and using the join method
stocks = pd.DataFrame({'VTI': vti["Adj Close"],  
                       'VTI 100ma': vti["100ma"],
                       'BND': bnd["Adj Close"],
                        'BND 100ma': bnd["100ma"],
                       })

print (stocks.head())

stocks.to_csv('Stock ETFs.csv')

我会使用
asfreq
对每个营业月进行采样

import datetime as dt  #set start and end dates for data we are using
import pandas as pd
import numpy as np
import pandas_datareader.data as web # how I grab data from Yahoo Finance API. Pandas is popular data analysis library.

start = dt.datetime(2007,1,1)
end = dt.datetime(2017,2,18)

ids = ['vti', 'bnd']
data = web.DataReader(ids, 'yahoo', start, end)

ac = data['Adj Close']
ac.join(ac.rolling(100).mean(), rsuffix=' 100ma').asfreq('BM')

                  bnd        vti  bnd 100ma  vti 100ma
Date                                                  
2007-01-31        NaN  58.453726        NaN        NaN
2007-02-28        NaN  57.504188        NaN        NaN
2007-03-30        NaN  58.148760        NaN        NaN
2007-04-30  54.632232  60.487535        NaN        NaN
2007-05-31  54.202353  62.739991        NaN  59.207899
2007-06-29  54.033591  61.634027        NaN  60.057136
2007-07-31  54.531996  59.455505        NaN  60.902113
2007-08-31  55.340892  60.330213  54.335640  61.227386
2007-09-28  55.674840  62.650936  54.542452  61.363872
2007-10-31  56.186500  63.773849  54.942038  61.675567

我会使用
asfreq
对每个营业月进行采样

import datetime as dt  #set start and end dates for data we are using
import pandas as pd
import numpy as np
import pandas_datareader.data as web # how I grab data from Yahoo Finance API. Pandas is popular data analysis library.

start = dt.datetime(2007,1,1)
end = dt.datetime(2017,2,18)

ids = ['vti', 'bnd']
data = web.DataReader(ids, 'yahoo', start, end)

ac = data['Adj Close']
ac.join(ac.rolling(100).mean(), rsuffix=' 100ma').asfreq('BM')

                  bnd        vti  bnd 100ma  vti 100ma
Date                                                  
2007-01-31        NaN  58.453726        NaN        NaN
2007-02-28        NaN  57.504188        NaN        NaN
2007-03-30        NaN  58.148760        NaN        NaN
2007-04-30  54.632232  60.487535        NaN        NaN
2007-05-31  54.202353  62.739991        NaN  59.207899
2007-06-29  54.033591  61.634027        NaN  60.057136
2007-07-31  54.531996  59.455505        NaN  60.902113
2007-08-31  55.340892  60.330213  54.335640  61.227386
2007-09-28  55.674840  62.650936  54.542452  61.363872
2007-10-31  56.186500  63.773849  54.942038  61.675567

乍一看,我认为上面的脚本有效。然后我注意到,当我将整个日期范围导出到excel时,2010年5月31日(阵亡将士纪念日)和2013年3月29日(耶稣受难日)显示为没有数据。有人知道如何在piRSquared提供的代码中解决这个问题吗?乍一看,我认为上面的脚本是有效的。然后我注意到,当我将整个日期范围导出到excel时,2010年5月31日(阵亡将士纪念日)和2013年3月29日(耶稣受难日)显示为没有数据。有人知道如何在piRSquared提供的上述代码中解决这个问题吗?