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 中的字典列表

python - 如何将字典转换为python中的列表[重复]

从python中的字典转换为列表的问题[重复]

Python将字典中的值转换为元组

如何在python中将数据帧中的符号转换为浮点数?