Я пытаюсь использовать для l oop для создания нескольких фреймов данных. Я вижу желаемый результат, если я помещаю вывод print()
внутрь для l oop. Однако, когда я изменяю это на return
выход для доступа к кадрам данных извне функции, я могу получить только первый кадр данных. Я не понимаю, что происходит, и буду признателен за вашу помощь!
Код:
# Global libraries
from datetime import datetime
import pandas as pd
# Local libraries
from instruments import metadata
# Get the data
def data():
# Get list of instruments
nifty = metadata()
# Specify the date range for the data pull
from_date = datetime.today().strftime('%Y-%m-%d 09:00:00')
to_date = datetime.today().strftime('%Y-%m-%d 15:30:00')
# Interval is the candle interval (minute, day, 5 minute etc.).
interval = 'minute'
# Iterate through the metadata
for stock in nifty:
# Set the instrument token for the data pull
instrument_token = stock['instrument_token']
# Call the api (I've removed login information for kite from this script)
hist = kite.historical_data(instrument_token,
from_date,
to_date,
interval,
continuous=False,
oi=False)
# Put the data in a pandas dataframe as a timeseries
data = pd.DataFrame(hist).set_index('date')
# Format data
data.columns = map(str.capitalize, data.columns)
data['Expiry'] = stock['expiry']
data = data[['Open','High','Low','Close','Volume','Expiry']]
data.index.names = ['Datetime']
# return data as a print statement - this works and I see the correct output
print(data)
# return data - this does not work as intended. If I call the function, I only get the first dataframe
return data
Пример данных для переменной nifty
:
[{'tick_size': 0.05, 'expiry': datetime.date(2020, 4, 30), 'exchange_token': '56059', 'instrument_type': 'FUT', 'segment': 'NFO-FUT', 'strike': 0.0, 'last_pri
ce': 0.0, 'name': 'NIFTY', 'lot_size': 75, 'tradingsymbol': 'NIFTY20APRFUT', 'exchange': 'NFO', 'instrument_token': 14351106}, {'tick_size': 0.05, 'expiry': d
atetime.date(2020, 6, 25), 'exchange_token': '95734', 'instrument_type': 'FUT', 'segment': 'NFO-FUT', 'strike': 0.0, 'last_price': 0.0, 'name': 'NIFTY', 'lot_
size': 75, 'tradingsymbol': 'NIFTY20JUNFUT', 'exchange': 'NFO', 'instrument_token': 24507906}]
Пример данные в переменной hist
:
[{'volume': 220650, 'low': 9158.45, 'close': 9173.7, 'date': datetime.datetime(2020, 4, 23, 9, 15, tzinfo=tzoffset(None, 19800)), 'high': 9200, 'open': 9200},
{'volume': 92475, 'low': 9173, 'close': 9176.75, 'date': datetime.datetime(2020, 4, 23, 9, 16, tzinfo=tzoffset(None, 19800)), 'high': 9180, 'open': 9173}]
Я читал о присвоении динамических c имен для фреймов данных, чтобы сделать их уникальными, но я не знаю, как заставить это работать.
Заранее спасибо за помощь!