Pandas Dataframe Yahoo Finance Проверка соответствия объема критериям - PullRequest
0 голосов
/ 24 августа 2018

Приведенная ниже программа импортирует тысячи биржевых тикеров из файла .CSV в список и передает эти тикеры в качестве параметра функции, которая извлекает столбец «Скорректированное закрытие» этой конкретной акции и устанавливает билет в качестве имени столбца. Это был у меня один фрейм данных, содержащий тысячи акций, и я могу получить скорректированное закрытие, просто используя df ['EnterTickerNameHere']. Данные из Yahoo содержат поле «Объем», в которое я хотел бы добавить акцию к моей df, если объем больше 100 000. Я не уверен, как это сделать, сохранив мой фрейм данных в том же формате, что и сейчас. Спасибо за чтение!

import pandas as pd
pd.core.common.is_list_like = pd.api.types.is_list_like
from pandas_datareader import data as pdr
import datetime
import fix_yahoo_finance as yf
yf.pdr_override()
import time

def getTickers():
    today = str(datetime.date.today())
    fourty_days_prior = str(datetime.date.today() - datetime.timedelta(days=40))

    # import the tickers from csv to a python list
    tickers = pd.read_csv('tickers.csv', sep='\n',dtype={'Tickers' : str})
    tickers = tickers.Tickers.tolist()

    data = pdr.get_data_yahoo(tickers, start= fourty_days_prior, end=today)['Adj Close']

Ответы [ 2 ]

0 голосов
/ 24 августа 2018

Вам не нужно загружать все эти данные дважды.

1) Загрузите последний том для каждого тикера (требуется только 1 день данных)

2) Примените условие кэта серия для обновления списка тикеров

3) Загрузите Adj.Закрыть этот сокращенный список тикеров

def getTickers(min_volume=100000):
    today = str(datetime.date.today())
    fourty_days_prior = str(datetime.date.today() - datetime.timedelta(days=40))

    # import the tickers from csv to a python list
    tickers = pd.read_csv('tickers.csv', sep='\n',dtype={'Tickers' : str})
    tickers = tickers.Tickers.tolist()

    # first import the latest volumes and apply your condition
    volumes = pdr.get_data_yahoo(tickers, start=today, end=today)['Volume'].T
    filtered_tickers = volumes[volumes.iloc[:,0] > min_volume].index.tolist()

    data = pdr.get_data_yahoo(filtered_tickers, start= fourty_days_prior, end=today)['Adj Close']
    return data
0 голосов
/ 24 августа 2018

сначала загрузите ['Adj Close'] в формате df:

data = pdr.get_data_yahoo(tickers, start= fourty_days_prior, end=today)['Adj Close']

Теперь создайте отдельный df для томов:

volume = pdr.get_data_yahoo(tickers, start= fourty_days_prior, end=today)['Volume']

(при условии, что получаются тома в df с именем столбца 'Volume')

Теперь вы можете сделать:

data['volume'] = [value if value > 100000 else 0 for value in volume['Volume']

(вы можете использовать None, если вы не хотите нули)

Теперь у вас есть столбец тома в вашей df, который содержит значение тома, только если оно было> 100000

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...