在python中获取月末数据

时间:2018-11-19 21:04:32

标签: python pandas

我对Python很陌生。

我试图弄清楚如何为每个数据集(aapl,intc,ebay和amzn)获得月底的“ Adj Close”行。

这是我所做的:

import numpy as np
import pandas as pd
from pandas import Series, DataFrame
from pandas.tseries.offsets import Day,MonthEnd

import pandas_datareader.data as web
import datetime
start = datetime.datetime(2013,10,28)
end = datetime.datetime(2018,10,28)
aapl = web.DataReader('AAPL','yahoo',start,end)
intc = web.DataReader('INTC','yahoo',start,end)
ebay = web.DataReader('EBAY','yahoo',start,end)
amzn = web.DataReader('AMZN','yahoo',start,end)

我放入了DataFrame

amazon = amzn
amzn = pd.DataFrame({'AMZN': amazon['Adj Close']})

我希望数据仅显示月末的数据,所以我这样做了,但这给了我一个错误:

amzn = amzn.loc[pd.date_range(start, end, freq='BM')]

如何只显示月份结束?

我还想创建一个表格,以日期作为索引,以显示该月末所有股票的收盘价。

我尝试了一下,但是没有用(它说有重复的密钥):

alldata = pd.merge(aapl,intc,ebay,amzn)

我知道‘BM’给了我一个月的结局,但是我似乎找不到使用它的方法。

我挠头,一直在寻找;我找不到答案。

2 个答案:

答案 0 :(得分:0)

在您的示例中,给出一个DataFrame:

data = pd.DataFrame({'AMZN': amzn['Adj Close']})

您可以尝试使用is_month_end函数:

data.loc[amzn['Adj Close'].index.is_month_end]

这将产生:

AMZN
Date    
2013-10-31  364.029999
2013-12-31  398.790009
2014-01-31  358.690002
...

请注意,如果有值,它将返回该月最后一天的结果。

要获取具有值(但不一定是该月的最后一天)的月份中的最新日期,您可以尝试:

data.reset_index().loc[d2['Date']
    .groupby(pd.DatetimeIndex(data.index)
    .to_period('M')).idxmax()]

答案 1 :(得分:0)

如果日期是您的索引,并且您希望将数据框与当月的最新日期进行子集化,请尝试以下操作:df[df.index.day == df.index.days_in_month]