Python-将隐藏在列表中的字典转换为数据帧
Posted
技术标签:
【中文标题】Python-将隐藏在列表中的字典转换为数据帧【英文标题】:Python- Convert Dict hidden in List to DataFrame 【发布时间】:2019-07-14 22:22:55 【问题描述】:我在将 JSON 中的规范化用于被识别为列表的字典时遇到问题。目标是从 yahoo_finance 创建一个数据框。
from yahoofinancials import YahooFinancials
import pandas as pd
from pandas.io.json import json_normalize
ticker = 'AAPL'
yahoo_financials = YahooFinancials(ticker)
balance_sheet_data_qt = yahoo_financials.get_financial_stmts('quarterly', 'balance')
#The return is a bit messy, I've simplified it with:
user_dict=balance_sheet_data_qt.get('balanceSheetHistoryQuarterly').get(ticker)
df=pd.DataFrame(user_dict)
但仍然难以将数据通过终点线,目标是将每个季度日期作为每行的索引,并将关键财务列为列。
【问题讨论】:
在你的代码中你所做的只是调用一个方法,我们应该如何理解你的问题??? 欢迎来到 SO。预期的输出是多少? 目前输出如下所示: 2018-03-31 \ 0 NaN 1 NaN 2 NaN 3 'netTangibleAssets': 126878000000, 'totalCurr... \ 2018 年 9 月 29 日 265595000 163756000 101839000 NaN 2017 年 9 月 30 日 229234000 141048000 88186000 NaN 目标是将财务记录列在列中,并将每个数据作为行的索引 - 在数据框中 【参考方案1】:您可以从集合中使用 ChainMap。
from collections import ChainMap
df = pd.DataFrame.from_dict(ChainMap(*user_dict), orient='index')
如果你不想使用ChainMap,你可以遍历user_dict(一个列表)中的dicts,然后将这些DFs附加到主df。
df = pd.DataFrame()
for d in user_dict:
df = df.append(pd.DataFrame.from_dict(d, orient='index'))
ChainMap 对我来说运行得更快
1.43 ms ± 13.7 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
对
7 ms ± 121 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
【讨论】:
【参考方案2】:我想这就是你要找的。p>
以下以日期为索引,列中为财务数据:
dataframe_entries = list()
for result in balance_sheet_data_qt.get('balanceSheetHistoryQuarterly').get('AAPL'):
extracted_date = list(result)[0]
dataframe_row = list(result.values())[0]
dataframe_row['date'] = extracted_date
dataframe_entries.append(dataframe_row)
df = pd.DataFrame(dataframe_entries).set_index('date')
输出:
date accountsPayable treasuryStock
2018-12-29 44293000000 ... -3588000000
2018-09-29 55888000000 ... -3454000000
2018-06-30 38489000000 ... -3111000000
2018-03-31 34311000000 ... -3064000000
【讨论】:
当我尝试这个时,第 3 行的错误“dict_keys”对象不支持索引 在这种情况下,您必须使用 python3。我现在已经更新了代码。以上是关于Python-将隐藏在列表中的字典转换为数据帧的主要内容,如果未能解决你的问题,请参考以下文章
如何将返回的python JSON字典转换为字典中的列表,并将数据转换为SQL插入
将 pandas.DataFrame 转换为 Python 中的字典列表