Python将列表中隐藏的Dict转换为DataFram

2024-10-03 02:40:03 发布

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

对于一个被识别为列表的字典,我在使用JSON中的normalize时遇到了问题。目标是从雅虎财经创建一个数据框架。你知道吗

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)

但仍然难以将数据带过终点线,目标是将每个季度的日期作为每行的索引,并将关键财务列为列。你知道吗


Tags: 数据fromimportjson目标pandasgetyahoo
2条回答

我想这就是你要找的。你知道吗

以下以日期为索引,列中包含财务数据:

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

可以使用集合中的链图。你知道吗

from collections import ChainMap    
df = pd.DataFrame.from_dict(ChainMap(*user_dict), orient='index')

如果您不想使用ChainMap,可以遍历user\ dict(列表)中的dict,然后将这些df附加到主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)

相关问题 更多 >