【问题标题】:Generate csv from nested json python从嵌套的 json python 生成 csv
【发布时间】:2018-04-21 07:33:21
【问题描述】:

我有以下嵌套的 json 文件,我需要在 pandas 数据框中进行转换,主要问题是整个 json 中只有一个唯一项,而且嵌套非常深。

我试图用下面的代码解决这个问题,但它给出了重复输出。

[{
"questions": [{
        "key": "years-age",
        "responseKey": null,
        "responseText": "27",
        "responseKeys": null
    },
    {
        "key": "gender",
        "responseKey": "male",
        "responseText": null,
        "responseKeys": null
    }

],
"transactions": [{
        "accId": "v1BN3o9Qy9izz4Jdz0M6C44Oga0qjohkOV3EJ",
        "tId": "80o4V19Kd9SqqN80qDXZuoov4rDob8crDaE53",
        "catId": "21001000",
        "tType": "80o4V19Kd9SqqN80qDXZuoov4rDob8crDaE53",
        "name": "Online Transfer FROM CHECKING 1200454623",
        "category": [
            "Transfer",
            "Acc Transfer"
        ]
    }

],
"institutions": [{
    "InstName": "Citizens company",
    "InstId": "inst_1",
    "accounts": [{
        "pAccId": "v1BN3o9Qy9izz4Jdz0M6C44Oga0qjohkOV3EJ",
        "pAccType": "depo",
        "pAccSubtype": "check",
        "_id": "5ad38837e806efaa90da4849"
    }]

}]
}]

我需要将其转换为 pandas 数据框,如下所示:

 id                        pAccId                                  tId      

 5ad38837e806efaa90da4849  v1BN3o9Qy9izz4Jdz0M6C44Oga0qjohkOV3EJ   80o4V19Kd9SqqN80qDXZuoov4rDob8crDaE53   

我面临的主要问题是“id”,因为它嵌套非常深,这是 json 的唯一唯一键。

这是我的代码:

  import pandas as pd
  import json
  with open('sub.json') as f:
       data = json.load(f)

  csv = ''
  for k in data:
       for t in k.get("institutions"):
           csv += k['institutions'][0]['accounts'][0]['_id']
           csv += "\t"
           csv += k['institutions'][0]['accounts'][0]['pAccId']
           csv += "\t"
           csv += k['transactions'][]['tId']
           csv += "\t"
           csv += "\n"

text_file = open("new_sub.csv", "w")
text_file.write(csv)
text_file.close()

希望上面的代码有意义,因为我是 python 新手。

【问题讨论】:

  • 你的代码在哪里?
  • 您的问题/问题描述/异常/您希望通过在这里提问得到解决的问题在哪里?你的代码不起作用吗?预期的结果是什么?实际结果是什么?请重读how to ask good questions - 这里严重缺乏上下文/信息:)

标签: python json python-3.x pandas dataframe


【解决方案1】:

读取 JSON 文件并创建映射到帐户的帐户 pAccId 键的字典。 建立交易列表。

with open('sub.json', 'r') as file:
    records = json.load(file)
    accounts = {
       account['pAccId']: account 
       for record in records 
       for institution in record['institutions']
       for account in institution['accounts']
    }
    transactions = (
        transaction 
        for record in records 
        for transaction in record['transactions']
    )

打开一个 csv 文件。对于每笔交易,从accounts 字典中获取帐户。

with open('new_sub.csv', 'w') as file:
    file.write('id, pAccId, tId\n')

    for transaction in transactions:
        pAccId = transaction['accId']
        account = accounts[pAccId]
        _id = account['_id']
        tId = transaction['tId']

        file.write(f"{_id}, {pAccId}, {tId}\n")

最后,读取csv文件到pandas.DataFrame

df = pd.read_csv('new_sub.csv')

【讨论】:

  • 生成 csv 时出现语法错误。我认为 file.write(f"{_id}, {pAccId}, {tId}\n"), f 在删除它时在这里引起问题,代码运行但 csv 文件仍然为空。
  • f-strings 在 Python 3.6 中是新的。如果您运行的 Python 版本较旧,则可以使用普通格式字符串。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-16
  • 2021-07-26
  • 2013-06-07
  • 2015-06-12
  • 1970-01-01
相关资源
最近更新 更多