我从雅虎金融公司(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}}]}}
获取数据
创建
dict
个DataFrames
:DataFrame
并将它们全部存储在dict
cashflowStatementHistory
是唯一的一级键,因此将数据设置为等于其值。你知道吗pandas
把每一个解压成一个单独的DataFrame
(例如df_dict['AMZN']
)更容易。value
是给定年份dicts
的list
。你知道吗list comprehension
每年在这个级别解包(例如range(len(data[tkr]))
)pd.concat
将每个股票代码的年度数据组合成一个DataFrame
。你知道吗将
df_dict
与pd.concat
组合:pd.concat
将df_dict
中的所有DataFrames
组合成一个DataFrame
。你知道吗堆叠日期和值:
转为最终形式:
相关问题 更多 >
编程相关推荐