Получение данных на конец месяца в Python - PullRequest
0 голосов
/ 20 ноября 2018

Я очень новичок в Python.

Я пытаюсь выяснить, как получить в конце месяца «Adj Close» для каждого набора данных (aapl, intc, ebay и amzn).

Вот что я сделал:

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 голосов
/ 20 ноября 2018

Если дата является вашим индексом, и вы хотите установить в свой фрейм данных самую последнюю дату месяца, попробуйте следующее: df[df.index.day == df.index.days_in_month]

0 голосов
/ 20 ноября 2018

Из вашего примера, учитывая 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()]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...