YahooFinancials:将多维字典写入 csv

YahooFinancials: Writing multidimensional dictionary to csv

有一个加载财务数据的好包,但它将它存储在一个多维字典中,我不知道如何将数据正确地逐列存储在 csv 文件中。

from yahoofinancials import YahooFinancials

ticker = 'AAPL'
yahoo_financials = YahooFinancials(ticker)

balance_sheet_data_qt = yahoo_financials.get_financial_stmts('quarterly', 'balance')

import csv

with open("Yahooprices.csv", "w") as csv_file:
    csv_app = csv.writer(csv_file, delimiter="\t")
    for row in balance_sheet_data_qt["balanceSheetHistoryQuarterly"]["AAPL"][0].items():
        csv_app.writerow(row)

我知道我想做的很简单,但是,我无法将它写入看起来像这样的 csv 文件:

我究竟做错了什么? 字典只有一个 .keys(),大小为 1.. 然而,有很多 .items(),我想在 csv 中按 columns/store 拆分。

在转换为 csv 之前,您是否尝试过 运行 通过 JSON 扁平化函数 JSON 对象?将具有非平面数据的 JSON 对象存储到 csv 中很棘手,因为 csv 是二维的,而 JSON 可以是多维的。首先尝试 运行 您尝试通过这样的函数保存为 csv 的对象:

# Function to Flatten return JSON data
def flatten_json(b, delim):
    val = {}
    for i in b.keys():
        if isinstance(b[i], dict):
            get = flatten_json(b[i], delim)
            for j in get.keys():
                val[i.replace(':', '_') + delim + j.replace(':', '_')] = get[j]
        elif isinstance(b[i], list):
            c = 1
            for it in b[i]:
                if isinstance(it, dict):
                    get = flatten_json(it, delim)
                    for j in get.keys():
                        val[i.replace(':', '_') + delim + j.replace(':', '_') + delim + str(c)] = get[j]
                else:
                    val[i.replace(':', '_') + delim + str(c)] = it
                c += 1
        else:
            val[i.replace(':', '_')] = b[i]
    return val

其中 b 是您尝试展平的 python 字典,而 delim 是您要附加到新字段名称的列分隔符字符串,这些名称将需要作为展平的结果创建。

例如,

init_dict = {data1: string, data2: [string1, string2], data3: [{obj: val}, {obj: val2}], data4: {obj2: value}}

完成函数后:

flat_dict = flatten_json(init_dict, '__')
print(flat_dict.items())

现在将输出字典,如下所示,它是二维的和 csv 友好的:

{data1: string, data2__1: string1, data2__2: string2, data3__obj__2: val, data3__obj__2: val2, data4__obj2: value}

希望对您有所帮助!

顺便说一句,我也是 YahooFinancials 的作者,感谢您使用该模块!