如何从4层嵌套字典中调用最深的嵌套值?

2024-10-02 22:26:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我从雅虎金融公司(Yahoo Financials)调出了9家股票公司的现金流量表。它产生了一个4层的嵌套字典-dict,list,dict,dict。理想的结果是显示dict的4层的值,在一个数据帧中,在所有的ticker中,按年份提前显示。你知道吗

例如:

2018-12-31
                                       AMZN              BABA
capitalExpenditures               -13427000000    -35482000000
changeinCash                       10317000000     -4232000000
changetoAccountReceivables         -4615000000      8639000000


2017-12-31
                                   AMZN             BABA
capitalExpenditures            -11955000000    -19628000000
changeinCash                     1922000000     56335000000
changetoAccountReceivables      -4780000000      5690000000

现在,每一层都是分开的,每一个标记器都在自己的层中,点击进去会给你带来4个日期,每个日期都在自己的层中,然后是最终的值,这样很难在标记器之间进行比较。你知道吗

我已经看了过去的问题张贴在这里,但大多数没有达到4层。另外,由于我的第二层是一个列表,我无法继续超出这个范围。你知道吗

请在下面找到完整的代码,非常感谢您的建议!你知道吗

from yahoofinancials import YahooFinancials
import pandas as pd

ecommerce = ['CTRP', 'EBAY', 'GRUB', 'BABA', 'JD', 'EXPE', 'AMZN', 'BKNG', 'MPNGF']

yahoo_financials_ecommerce = YahooFinancials(ecommerce)

ecommerce_cash_flow_data = yahoo_financials_ecommerce.get_financial_stmts('annual', 'cash')


for k, v in ecommerce_cash_flow_data.items():
    for k1, v1 in v.items():
        for k2, v2 in v1.items():
            for k3, v3 in v2.items():
                print(v3) ###AttributeError: 'list' object has no attribute 'items'

def recursive_items(ecommerce_cash_flow_data):
    for key, value in ecommerce_cash_flow_data.items():
        if type(value) is dict:
            yield (key, value)
            yield from recursive_items(value)
        else:
            yield (key, value)

for key, value in recursive_items(ecommerce_cash_flow_data):
    print(key, value)

cashflow = pd.DataFrame(list(ecommerce_cash_flow_data.items())) ###Only shows '0' == cashflowStatementHistory, '1' == every value dumped here thus does not help the situation

cashflow = pd.concat([pd.DataFrame(ecommerce_cash_flow_data, columns=[key, value]) for key, value in recursive_items(ecommerce_cash_flow_data)], ignore_index=False)
cashflow ###TypeError: unhashable type: 'dict'

your_df_from_dict=pd.DataFrame.from_dict(ecommerce_cash_flow_data,orient='index')
print(your_df_from_dict) ###helps arrange by tickers, but would like to pull upfront as well the values within each ticker, by cashflow statement objects (capitalExpenditures, changeinCash, etc) and dates.

原始嵌套目录:

{'cashflowStatementHistory': {'AMZN': [{'2018-12-31': {'capitalExpenditures': -13427000000,
                                                       'changeInCash': 10317000000,
                                                       'changeToAccountReceivables': -4615000000,
                                                       'changeToInventory': -1314000000,
                                                       'changeToLiabilities': 4414000000,
                                                       'changeToNetincome': 6352000000,
                                                       'changeToOperatingActivities': 472000000,
                                                       'depreciation': 15341000000,
                                                       'effectOfExchangeRate': -351000000,
                                                       'investments': 1140000000,
                                                       'netBorrowings': -7686000000,
                                                       'netIncome': 10073000000,
                                                       'otherCashflowsFromInvestingActivities': 2104000000,
                                                       'totalCashFromFinancingActivities': -7686000000,
                                                       'totalCashFromOperatingActivities': 30723000000,
                                                       'totalCashflowsFromInvestingActivities': -12369000000}},
                                       {'2017-12-31': {'capitalExpenditures': -11955000000,
                                                       'changeInCash': 1922000000,
                                                       'changeToAccountReceivables': -4780000000,
                                                       'changeToInventory': -3583000000,
                                                       'changeToLiabilities': 7838000000,
                                                       'changeToNetincome': 4096000000,
                                                       'changeToOperatingActivities': 283000000,
                                                       'depreciation': 11478000000,
                                                       'effectOfExchangeRate': 713000000,
                                                       'investments': -3054000000,
                                                       'netBorrowings': 9928000000,
                                                       'netIncome': 3033000000,
                                                       'otherCashflowsFromInvestingActivities': 1897000000,
                                                       'totalCashFromFinancingActivities': 9928000000,
                                                       'totalCashFromOperatingActivities': 18365000000,
                                                       'totalCashflowsFromInvestingActivities': -27084000000}},
                                       {'2016-12-31': {'capitalExpenditures': -7804000000,
                                                       'changeInCash': 3759000000,
                                                       'changeToAccountReceivables': -3436000000,
                                                       'changeToInventory': -1426000000,
                                                       'changeToLiabilities': 6985000000,
                                                       'changeToNetincome': 2869000000,
                                                       'changeToOperatingActivities': 1724000000,
                                                       'depreciation': 8116000000,
                                                       'effectOfExchangeRate': -212000000,
                                                       'investments': -2663000000,
                                                       'netBorrowings': -3716000000,
                                                       'netIncome': 2371000000,
                                                       'otherCashflowsFromInvestingActivities': 1067000000,
                                                       'totalCashFromFinancingActivities': -3716000000,
                                                       'totalCashFromOperatingActivities': 17203000000,
                                                       'totalCashflowsFromInvestingActivities': -9516000000}},
                                       {'2015-12-31': {'capitalExpenditures': -5387000000,
                                                       'changeInCash': 1333000000,
                                                       'changeToAccountReceivables': -1755000000,
                                                       'changeToInventory': -2187000000,
                                                       'changeToLiabilities': 5586000000,
                                                       'changeToNetincome': 2605000000,
                                                       'changeToOperatingActivities': 913000000,
                                                       'depreciation': 5646000000,
                                                       'effectOfExchangeRate': -374000000,
                                                       'investments': -1066000000,
                                                       'netBorrowings': -3882000000,
                                                       'netIncome': 596000000,
                                                       'otherCashflowsFromInvestingActivities': 798000000,
                                                       'totalCashFromFinancingActivities': -3882000000,
                                                       'totalCashFromOperatingActivities': 12039000000,
                                                       'totalCashflowsFromInvestingActivities': -6450000000}}],
                              'BABA': [{'2019-03-31': {'capitalExpenditures': -35482000000,
                                                       'changeInCash': -4232000000,
                                                       'changeToLiabilities': 8639000000,
                                                       'changeToNetincome': -6241000000,
                                                       'changeToOperatingActivities': 20551000000,
                                                       'depreciation': 36936000000,
                                                       'effectOfExchangeRate': 3245000000,
                                                       'investments': -65965000000,
                                                       'issuanceOfStock': 354000000,
                                                       'netBorrowings': -4231000000,
                                                       'netIncome': 87886000000,
                                                       'otherCashflowsFromFinancingActivities': 7357000000,
                                                       'otherCashflowsFromInvestingActivities': -8000000,
                                                       'repurchaseOfStock': -10872000000,
                                                       'totalCashFromFinancingActivities': -7392000000,
                                                       'totalCashFromOperatingActivities': 150975000000,
                                                       'totalCashflowsFromInvestingActivities': -151060000000}},
                                       {'2018-03-31': {'capitalExpenditures': -19628000000,
                                                       'changeInCash': 56335000000,
                                                       'changeToLiabilities': 5690000000,
                                                       'changeToNetincome': 16967000000,
                                                       'changeToOperatingActivities': 10425000000,
                                                       'depreciation': 21885000000,
                                                       'effectOfExchangeRate': -6065000000,
                                                       'investments': -52936000000,
                                                       'issuanceOfStock': 399000000,
                                                       'netBorrowings': 33625000000,
                                                       'netIncome': 64093000000,
                                                       'otherCashflowsFromFinancingActivities': -13665000000,
                                                       'otherCashflowsFromInvestingActivities': -450000000,
                                                       'repurchaseOfStock': -10872000000,
                                                       'totalCashFromFinancingActivities': 20359000000,
                                                       'totalCashFromOperatingActivities': 125805000000,
                                                       'totalCashflowsFromInvestingActivities': -83764000000}},
                                       {'2017-03-31': {'capitalExpenditures': -11006000000,
                                                       'changeInCash': 38227000000,
                                                       'changeToLiabilities': 4611000000,
                                                       'changeToNetincome': 15100000000,
                                                       'changeToOperatingActivities': 478000000,
                                                       'depreciation': 14185000000,
                                                       'effectOfExchangeRate': 2038000000,
                                                       'investments': -28582000000,
                                                       'issuanceOfStock': 14694000000,
                                                       'netBorrowings': 29333000000,
                                                       'netIncome': 43675000000,
                                                       'otherCashflowsFromFinancingActivities': 2069000000,
                                                       'otherCashflowsFromInvestingActivities': -253000000,
                                                       'repurchaseOfStock': -13182000000,
                                                       'totalCashFromFinancingActivities': 32914000000,
                                                       'totalCashFromOperatingActivities': 82854000000,
                                                       'totalCashflowsFromInvestingActivities': -79579000000}},
                                       {'2016-03-31': {'capitalExpenditures': -10845000000,
                                                       'changeInCash': -1375000000,
                                                       'changeToLiabilities': 2350000000,
                                                       'changeToNetincome': -28625000000,
                                                       'changeToOperatingActivities': 3366000000,
                                                       'depreciation': 6977000000,
                                                       'effectOfExchangeRate': 466000000,
                                                       'investments': -36162000000,
                                                       'issuanceOfStock': 693000000,
                                                       'netBorrowings': 2478000000,
                                                       'netIncome': 71460000000,
                                                       'otherCashflowsFromFinancingActivities': 778000000,
                                                       'otherCashflowsFromInvestingActivities': 781000000,
                                                       'repurchaseOfStock': -19795000000,
                                                       'totalCashFromFinancingActivities': -15846000000,
                                                       'totalCashFromOperatingActivities': 56836000000,
                                                       'totalCashflowsFromInvestingActivities': -42831000000}}]}}

Tags: datavalueitemscashflowdictecommerceinvestments
1条回答
网友
1楼 · 发布于 2024-10-02 22:26:10

获取数据

ecommerce = ['CTRP', 'EBAY', 'GRUB', 'BABA', 'JD', 'EXPE', 'AMZN', 'BKNG', 'MPNGF']

yahoo_financials_ecommerce = YahooFinancials(ecommerce)

ecommerce_cash_flow_data = yahoo_financials_ecommerce.get_financial_stmts('annual', 'cash')

创建dictDataFrames

  • 遍历每个ticker以创建一个DataFrame并将它们全部存储在dict
  • cashflowStatementHistory是唯一的一级键,因此将数据设置为等于其值。你知道吗
  • 2级键是股票代码符号。让pandas把每一个解压成一个单独的DataFrame(例如df_dict['AMZN'])更容易。
    • 每个股票代码的value是给定年份dictslist。你知道吗
    • list comprehension每年在这个级别解包(例如range(len(data[tkr]))
    • pd.concat将每个股票代码的年度数据组合成一个DataFrame。你知道吗
data = ecommerce_cash_flow_data['cashflowStatementHistory']

df_dict = dict()

for tkr in ecommerce:

    df_dict[tkr] = pd.concat([pd.DataFrame(data[tkr][x]) for x in range(len(data[tkr]))],
               sort=False, join='outer', axis=1)

df_dictpd.concat组合:

  • 在这个层次上,pd.concatdf_dict中的所有DataFrames组合成一个DataFrame。你知道吗
df = pd.concat(df_dict, sort=True)
print(df.head())

enter image description here

堆叠日期和值:

df_l = pd.DataFrame(df.stack())
df_l.reset_index(inplace=True)
df_l.columns = ['ticker', 'financials', 'date', 'value']
print(df_l.head())

enter image description here

转为最终形式:

df_w = df_l.pivot_table(index=['date', 'financials'], columns='ticker', values='value')
print(df_w.head())

enter image description here

相关问题 更多 >