[英]Pythonic way to extract specific values from a dictionary based on a subset of keys
[英]Subset complex nested dictionary based on specific keys and values
我正在使用 yahoofinancials 包来获取某些选定代码的历史价格。 下面的代码给了我一个复杂的嵌套字典
from yahoofinancials import YahooFinancials
yahoo_financials = YahooFinancials(ticker_sub)
data = yahoo_financials.get_historical_price_data(start_date=period_start
, end_date=period_end
, time_interval='daily')
这是我得到的字典样本:
{'RYAN.L':
{
'eventsData': {}
}
, 'SAP':
{
'eventsData': {}
, 'firstTradeDate':
{
'formatted_date': '1995-09-18'
, 'date': 811431000
}
, 'currency': 'USD'
, 'instrumentType': 'EQUITY'
, 'timeZone': {'gmtOffset': -14400}
, 'prices': [{
'date': 1599249601
, 'high': 161.3000030517578
, 'low': 153.94000244140625
, 'open': 160.42999267578125
, 'close': 159.42999267578125
, 'volume': 702491
, 'adjclose': 159.42999267578125
, 'formatted_date': '2020-09-04'
}]
}
}
但是,当我运行下面的代码以在 Pansdas DF(下面的代码)中获取它时,我遇到了一些 keyError [KeyError: 'prices']。
stock_hist_df = pd.DataFrame({
a: {x['formatted_date']: x['adjclose'] for x in data[a]['prices']}
for a in ticker_sub
})
我认为,因为字典 [data] 中的第一个元素没有 ['prices'] 键(任何数据)。
我对 Python 还是相当陌生,并且我一天中的大部分时间都在使用循环/列表理解来对 ['prices'] 键和值 [>0] 退出的位置进行子集化。 然后,下一部分 [pd.DataFrame] 有望成功! 想知道是否有人可以帮助我解决这个问题或建议替代/更好的方法来处理这个问题。
干杯:-)
纳德尔
你可以试试下面的代码。
stock_hist_df = pd.DataFrame({
a: {x['formatted_date']: x['adjclose'] for x in data[a].get('prices', [])}
for a in ticker_sub
})
对于历史数据,您可能会发现使用 yfinance 库更容易。
import yfinance as yf
import pandas as pd
df = yf.download('IBM',
start='2020-01-01',
end='2020-09-05',
progress=False)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.