Создание нескольких фреймов данных с помощью панд - PullRequest
0 голосов
/ 04 декабря 2018

Есть ли способ использовать цикл for или что-то подобное для запуска через код для создания нескольких DataFrames с пандами, которые я могу назначить отдельным переменным, вместо жесткого кодирования обоих DataFrames?

Если я добавлю новые тикеры, будет неэффективно продолжать их жестко кодировать.

import pandas_datareader as pdr
from datetime import datetime

Equity_Tickers = ["FB", "MSFT"]

start = datetime(2018, 9, 15)
end = datetime.today().date()

# First DataFrame 
data = pdr.DataReader(Equity_Tickers[0], 'yahoo', start, end)
df = data[['Adj Close']]

# Second DataFrame
data = pdr.DataReader(Equity_Tickers[1], 'yahoo', start, end)
df1 = data[['Adj Close']]

1 Ответ

0 голосов
/ 04 декабря 2018

Конечно, вы можете использовать переменную вместо жесткого кодирования тикера:

ticker = Equity_Tickers[0]  # FB
data = pdr.DataReader(ticker, 'yahoo', start, end)

Чтобы создать цикл, вы можете сделать что-то вроде:

for ticker in Equity_Tickers:
    data = pdr.DataReader(ticker, 'yahoo', start, end)
    df = data[['Adj Close']]

Хитростьхранение переменной df в каждой итерации цикла вместо ее перезаписи.Одним из решений является сохранение каждого DataFrame в списке или словаре.

frames = []
for ticker in Equity_Tickers:
    data = pdr.DataReader(ticker, 'yahoo', start, end)
    frames.append(data[['Adj Close']])

# eg, use frames[0] to access first ticker's DataFrame

ИЛИ

frames = {}
for ticker in Equity_Tickers:
    data = pdr.DataReader(ticker, 'yahoo', start, end)
    frames[ticker] = data[['Adj Close']]

# eg, use frames['FB'] to access FB ticker's DataFrame

Если вы действительно хотите, вы можете также использовать понимание списка / словарь, чтобы выполнить это в одной строке:

# list comprehension
frames = [pdr.DataReader(t, 'yahoo', start, end)[['Adj Close']] for t in Equity_Tickers]

# dict comprehension
frames = {t: pdr.DataReader(t, 'yahoo', start, end)[['Adj Close']] for t in Equity_Tickers}

Дополнительное примечание: Вы также можете рассмотреть возможность объединения фреймов в один большой DataFrame, возможно, аккуратный стильDataFrame где "ticker" - это поле для каждой строки.

...